我首先将两个着色器附加到我的程序中,然后调用glGetUniformBlockIndex
来绑定统一缓冲区。我希望glBindShader
函数让我指定要解析哪个着色器以找到制服,但是没有这样的东西。
我怎么能告诉OpenGL它应该查看哪个着色器?
答案 0 :(得分:4)
假设程序已完全链接,则无关紧要。以下是glGetUniformBlockIndex
的可能性及其后果:
GL_INVALID_INDEX
。glUniformBlockBinding
一起使用。glUniformBlockBinding
一起使用。最后一部分是关键。如果在两个着色器中指定具有相同名称的统一块,则GLSL要求这些统一块的定义相同。如果不是,那么您在glLinkProgram
中收到错误。由于它们是相同的(否则你不会在这里),GLSL认为它们是相同的统一块。
即使它们处于两个着色器阶段,它们仍然是相同的统一块。因此,您可以在阶段之间共享统一块,所有块都使用一个块绑定。只要它确实是相同的统一块。