2013-01-14 21 views
0

glGetActiveUniformBlock将由GL_UNIFORM_BLOCK_BINDING返回什么,如果指定的统一块没有绑定到任何绑定索引? http://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlock.xml说:GL_UNIFORM_BLOCK_BINDING当块没有被绑定到索引时

如果以前没有指定统一块,则返回零。

这是否意味着零将被返回为未绑定块?如果是,那么这是否意味着在程序链接之后所有的unifrom块默认绑定到零指数?同样,如果是的话,那么我怎样才能知道指定的块是否被绑定到零或者它从未绑定到任何索引?

回答

0

对你的前两个问题,是的。

再说一遍,如果是的话,那么如何判断指定的块是否被绑定为零或者它从未绑定到任何索引?

你不知道。那么,那又有什么目的呢?您应该从代码或着色器中设置这些值。在这两种情况下,你都知道设置了什么。除非你正在编写一些着色器工具,要求用户指定一个绑定,否则它应该没有关系。

如果您正在编写这样的工具,那么只需向用户显示所有绑定是什么。如果多个统一块使用相同的索引,那么用户继续进行直到他们解决冲突(或确认他们真正想要的)是非法的。

+0

当然我知道设置了什么,但是我在代码的不同部分请求了'GL_UNIFORM_BLOCK_BINDING'。因此这种请求的特殊错误状态可能有助于检测错误的调用并使测试更容易一些。 – Sergey

+0

@Sergey:这暗示了代码中的一些混淆。就个人而言,我会建议为这类东西建立一个简单的约定。一种块总是使用索引0(例如,在所有渲染着色器之间共享的投影矩阵)。索引1涉及其他内容(比如模型到视图的转换)。索引2可能是照明参数去的地方。等等。或者换一种说法,设置一些事情,这样你就不用问我了。我看到它的方式,几乎在任何时候你使用'glGet *',你可能做错了什么。 –