| 851 | } |
| 852 | |
| 853 | void GLSLReflection::ReflectBufferVariables() |
| 854 | { |
| 855 | GLint numResources = 0; |
| 856 | glGetProgramInterfaceiv(mHandle, GL_BUFFER_VARIABLE, GL_ACTIVE_RESOURCES, &numResources); |
| 857 | |
| 858 | if (numResources > 0) |
| 859 | { |
| 860 | mBufferVariables.resize(numResources); |
| 861 | |
| 862 | enum |
| 863 | { |
| 864 | IDX_NAME_LENGTH, |
| 865 | IDX_TYPE, |
| 866 | IDX_ARRAY_SIZE, |
| 867 | IDX_OFFSET, |
| 868 | IDX_BLOCK_INDEX, |
| 869 | IDX_ARRAY_STRIDE, |
| 870 | IDX_MATRIX_STRIDE, |
| 871 | IDX_IS_ROW_MAJOR, |
| 872 | IDX_TOP_LEVEL_ARRAY_SIZE, |
| 873 | IDX_TOP_LEVEL_ARRAY_STRIDE, |
| 874 | IDX_REFERENCED_BY_VERTEX_SHADER, |
| 875 | IDX_REFERENCED_BY_GEOMETRY_SHADER, |
| 876 | IDX_REFERENCED_BY_FRAGMENT_SHADER, |
| 877 | IDX_REFERENCED_BY_COMPUTE_SHADER, |
| 878 | IDX_REFERENCED_BY_TESS_CONTROL_SHADER, |
| 879 | IDX_REFERENCED_BY_TESS_EVALUATION_SHADER |
| 880 | }; |
| 881 | |
| 882 | std::vector<GLenum> const properties = |
| 883 | { |
| 884 | GL_NAME_LENGTH, |
| 885 | GL_TYPE, |
| 886 | GL_ARRAY_SIZE, |
| 887 | GL_OFFSET, |
| 888 | GL_BLOCK_INDEX, |
| 889 | GL_ARRAY_STRIDE, |
| 890 | GL_MATRIX_STRIDE, |
| 891 | GL_IS_ROW_MAJOR, |
| 892 | GL_TOP_LEVEL_ARRAY_SIZE, |
| 893 | GL_TOP_LEVEL_ARRAY_STRIDE, |
| 894 | GL_REFERENCED_BY_VERTEX_SHADER, |
| 895 | GL_REFERENCED_BY_GEOMETRY_SHADER, |
| 896 | GL_REFERENCED_BY_FRAGMENT_SHADER, |
| 897 | GL_REFERENCED_BY_COMPUTE_SHADER, |
| 898 | GL_REFERENCED_BY_TESS_CONTROL_SHADER, |
| 899 | GL_REFERENCED_BY_TESS_EVALUATION_SHADER |
| 900 | }; |
| 901 | |
| 902 | GLsizei const numProperties = static_cast<GLsizei>(properties.size()); |
| 903 | |
| 904 | std::vector<GLint> results(properties.size(), 0); |
| 905 | for (int32_t i = 0; i < numResources; ++i) |
| 906 | { |
| 907 | glGetProgramResourceiv(mHandle, GL_BUFFER_VARIABLE, i, numProperties, |
| 908 | properties.data(), numProperties, nullptr, results.data()); |
| 909 | |
| 910 | GLsizei const numBytes = static_cast<GLsizei>(results[IDX_NAME_LENGTH] + 1); |
nothing calls this directly
no test coverage detected