绑定的OpenGL对象中的依赖项

时间:2013-07-26 12:23:28

标签: opengl opengl-es

如果我理解正确,某些OpenGL状态依赖于其他状态:

glUseProgram(program1);
glUniform1i(program1Uniform1, x);
glUseProgram(program2);
glUniform1i(program2Uniform1, y);
glUseProgram(program1);

在此代码段的末尾,即使program1x具有相同的索引,program1Uniform1的统一仍设置为program2Uniform1。因此,对glUniform1i的第二次调用不会覆盖第一次调用,因为我们已在两次调用之间切换了着色器程序。

到目前为止是否正确?

如果正确,那么统一状态程序状态有某种依赖性,因为如果我们通过调用glUseProgram()来切换程序, 统一状态被隐式改变。

是否有书籍或网站列出了这些依赖项?

我认为我理解着色器程序,FBO,VBO,VAO,制服,属性等的概念,但我仍然难以将它们组合在一起。我总是问自己“在切换状态A后是否必须切换状态B,或者状态B依赖于状态A?”

2 个答案:

答案 0 :(得分:1)

  

到目前为止是否正确?

是的,是的。

  

如果正确,则统一状态具有某种依赖性   在程序状态,因为如果我们通过调用切换程序   glUseProgram(),统一状态被隐式改变。

嗯,从概念上讲,统一状态并不依赖于程序状态,而是统一状态是程序状态的 part 。当程序切换时,没有独立的统一状态可以切换,只有各个程序的统一值(当前活动程序的值可以通过API访问)。

  

是否有书籍或网站列出了这些依赖项?

好吧,你最喜欢的OpenGL教程或书应该彻底告诉你各个对象类型,它们封装的状态以及它们如何相互作用。除此之外,OpenGL sepcification当然是最后一个词。

答案 1 :(得分:1)

  

到目前为止是否正确?

是。 Uniforrms 每个程序状态

  

如果我们通过调用glUseProgram()来切换程序,则统一状态会被隐式更改。

嗯,不是真的。由于制服是按程序状态进行的,因此根本没有统一的状态。只是当前的程序已经改变。

  

是否有书籍或网站列出了这些依赖项?

此类事物的权威来源是OpenGL Specification,请参阅第23章“状态表”。