【发布时间】:2015-01-06 16:38:57
【问题描述】:
我在将统一缓冲区对象绑定到多个着色器时遇到了一些问题。
以下代码的执行:
for(auto& shaderIter : shaderHandler.getShaderPrograms()){
shaderIter.second->bind();
GLuint programID = shaderIter.second->programId();
GLuint index = glFuncs->glGetUniformBlockIndex(programID, "MatrixUBO");
glFuncs->glUniformBlockBinding(programID, index, UBO_MATRICES_BINDING_POINT);
shaderIter.second->release();
}
导致错误信息
QOpenGLDebugMessage("APISource", 1281, "GL_INVALID_VALUE error generated. Uniform block index exceeds the maximum supported uniform buffers.", "HighSeverity", "ErrorType")
着色器程序的类型是QOpenGLShaderProgram。我在这些着色器程序中使用顶点、几何、片段和计算着色器。
GL_MAX_{VERTEX, FRAGMENT, GEOMETRY}_UNIFORM_BLOCKS 的值为 14。index 的输出适用于每个程序 0,除了 4294967295 的程序。
【问题讨论】:
标签: c++ qt opengl shader compute-shader