Opengl GL_UNIFORM_BLOCK_块未绑定到索引时的绑定

Opengl GL_UNIFORM_BLOCK_块未绑定到索引时的绑定,opengl,uniform,Opengl,Uniform,如果指定的统一块未绑定到任何绑定索引,则使用GL\u UNIFORM\u BLOCK\u绑定的glgetactiveuniformormblock将返回什么?说: 如果之前未指定统一块,则返回零 这是否意味着未绑定块将返回零?如果是,是否意味着在程序链接之后,默认情况下所有unifrom块都绑定到零二进制索引?同样,如果是,那么我如何判断指定的块是绑定到零还是从未绑定到任何索引?对于前两个问题,是的 同样,如果是,那么我如何判断指定的块是绑定到零还是从未绑定到任何索引 你没有。那么,这又有什么用

如果指定的统一块未绑定到任何绑定索引,则使用
GL\u UNIFORM\u BLOCK\u绑定的
glgetactiveuniformormblock
将返回什么?说:

如果之前未指定统一块,则返回零


这是否意味着未绑定块将返回零?如果是,是否意味着在程序链接之后,默认情况下所有unifrom块都绑定到零二进制索引?同样,如果是,那么我如何判断指定的块是绑定到零还是从未绑定到任何索引?

对于前两个问题,是的

同样,如果是,那么我如何判断指定的块是绑定到零还是从未绑定到任何索引

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


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

当然我知道设置了什么,但我要求在代码的不同部分进行
GL\u uniform\u BLOCK\u绑定。因此,这种请求的特殊错误状态有助于检测错误调用,并使测试更容易。@Sergey:这表明代码中存在一些混乱。就我个人而言,我建议为这类东西建立一个简单的约定。一种块始终使用索引0(例如,在所有渲染着色器之间共享的投影矩阵)。索引1转到其他内容(例如,查看转换的模型)。索引2可能是照明参数的位置。等等或者,换一种说法,把事情安排好,这样你就不用问了。在我看来,几乎每当你使用
glGet*
,你都可能做错了什么。