我首先将两个着色器附加到我的程序,然后调用glGetUniformBlockIndex
绑定统一缓冲区。我希望有一个glBindShader
函数可以让我指定要解析哪个着色器以找到制服,但没有这样的事情。我如何告诉 OpenGL 它应该查看哪个着色器?
问问题
1147 次
1 回答
4
假设程序已经完全链接,那没关系。以下是可能性glGetUniformBlockIndex
及其后果:
- 给定的统一块名称不在任何着色器中。然后你回来
GL_INVALID_INDEX
。 - 给定的统一块名称用于其中一个着色器。然后你取回它的块索引,用于
glUniformBlockBinding
. - 给定的统一块名称用于多个着色器。然后你得到块索引,这意味着所有这些,要与
glUniformBlockBinding
.
最后一部分是关键。如果您在两个着色器中指定同名的统一块,则 GLSL 要求这些统一块的定义相同。如果不是,那么您会在glLinkProgram
. 因为它们是相同的(否则你不会到这里),GLSL 认为它们是相同的统一块。
即使它们处于两个着色器阶段,它们仍然是同一个统一块。因此,您可以在阶段之间共享统一的块,所有这些都具有一个块绑定。只要它确实是同一个统一块。
于 2012-04-04T23:53:41.130 回答