glGetUniformBlockIndex如何知道是否要查看顶点着色器或片段着色器?

时间:2012-04-04 23:28:32

标签: opengl glsl shader uniform

我首先将两个着色器附加到我的程序中,然后调用glGetUniformBlockIndex来绑定统一缓冲区。我希望glBindShader函数让我指定要解析哪个着色器以找到制服,但是没有这样的东西。 我怎么能告诉OpenGL它应该查看哪个着色器?

1 个答案:

答案 0 :(得分:4)

假设程序已完全链接,则无关紧要。以下是glGetUniformBlockIndex的可能性及其后果:

  • 给出的统一块名称不在任何着色器中。然后你回来GL_INVALID_INDEX
  • 给定的统一块名称用于其中一个着色器。然后你找回它的块索引,与glUniformBlockBinding一起使用。
  • 给出的统一块名称用于多个着色器。然后你会找回所有的块索引,与glUniformBlockBinding一起使用。

最后一部分是关键。如果在两个着色器中指定具有相同名称的统一块,则GLSL要求这些统一块的定义相同。如果不是,那么您在glLinkProgram中收到错误。由于它们是相同的(否则你不会在这里),GLSL认为它们是相同的统一块。

即使它们处于两个着色器阶段,它们仍然是相同的统一块。因此,您可以在阶段之间共享统一块,所有块都使用一个块绑定。只要它确实是相同的统一块。