MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / ReflectDataBlocks

Method ReflectDataBlocks

GTE/Graphics/GL46/GLSLReflection.cpp:619–702  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

617}
618
619void GLSLReflection::ReflectDataBlocks(GLenum programInterface, std::vector<DataBlock>& blocks)
620{
621 GLint numResources = 0;
622 glGetProgramInterfaceiv(mHandle, programInterface, GL_ACTIVE_RESOURCES, &numResources);
623
624 if (numResources > 0)
625 {
626 blocks.resize(numResources);
627
628 enum
629 {
630 IDX_NAME_LENGTH,
631 IDX_BUFFER_BINDING,
632 IDX_BUFFER_DATA_SIZE,
633 IDX_REFERENCED_BY_VERTEX_SHADER,
634 IDX_REFERENCED_BY_GEOMETRY_SHADER,
635 IDX_REFERENCED_BY_FRAGMENT_SHADER,
636 IDX_REFERENCED_BY_COMPUTE_SHADER,
637 IDX_REFERENCED_BY_TESS_CONTROL_SHADER,
638 IDX_REFERENCED_BY_TESS_EVALUATION_SHADER,
639 IDX_NUM_ACTIVE_VARIABLES
640 };
641
642 std::vector<GLenum> const properties =
643 {
644 GL_NAME_LENGTH,
645 GL_BUFFER_BINDING,
646 GL_BUFFER_DATA_SIZE,
647 GL_REFERENCED_BY_VERTEX_SHADER,
648 GL_REFERENCED_BY_GEOMETRY_SHADER,
649 GL_REFERENCED_BY_FRAGMENT_SHADER,
650 GL_REFERENCED_BY_COMPUTE_SHADER,
651 GL_REFERENCED_BY_TESS_CONTROL_SHADER,
652 GL_REFERENCED_BY_TESS_EVALUATION_SHADER,
653 GL_NUM_ACTIVE_VARIABLES
654 };
655
656 GLsizei const numProperties = static_cast<GLsizei>(properties.size());
657
658 std::vector<GLint> results(properties.size(), 0);
659 for (int32_t i = 0; i < numResources; ++i)
660 {
661 glGetProgramResourceiv(mHandle, programInterface, i, numProperties,
662 properties.data(), numProperties, nullptr, results.data());
663
664 GLsizei const numBytes = static_cast<GLsizei>(results[IDX_NAME_LENGTH] + 1);
665 std::vector<GLchar> name(numBytes);
666 glGetProgramResourceName(mHandle, programInterface, i, numBytes,
667 nullptr, name.data());
668
669 DataBlock& info = blocks[i];
670 info.name = std::string(name.data());
671
672 if (mVendorIsIntel && programInterface == GL_SHADER_STORAGE_BLOCK)
673 {
674 IntelWorkaround(info.name, results.data());
675 }
676

Callers

nothing calls this directly

Calls 6

glGetProgramInterfaceivFunction · 0.85
glGetProgramResourceivFunction · 0.85
glGetProgramResourceNameFunction · 0.85
beginMethod · 0.80
endMethod · 0.80

Tested by

no test coverage detected