如果我理解正确,某些OpenGL状态依赖于其他状态:
glUseProgram(program1);
glUniform1i(program1Uniform1, x);
glUseProgram(program2);
glUniform1i(program2Uniform1, y);
glUseProgram(program1);
在此代码段的末尾,即使program1
与x
具有相同的索引,program1Uniform1
的统一仍设置为program2Uniform1
。因此,对glUniform1i
的第二次调用不会覆盖第一次调用,因为我们已在两次调用之间切换了着色器程序。
到目前为止是否正确?
如果正确,那么统一状态对程序状态有某种依赖性,因为如果我们通过调用glUseProgram()
来切换程序, 统一状态被隐式改变。
是否有书籍或网站列出了这些依赖项?
我认为我理解着色器程序,FBO,VBO,VAO,制服,属性等的概念,但我仍然难以将它们组合在一起。我总是问自己“在切换状态A后是否必须切换状态B,或者状态B依赖于状态A?”
答案 0 :(得分:1)
到目前为止是否正确?
是的,是的。
如果正确,则统一状态具有某种依赖性 在程序状态,因为如果我们通过调用切换程序 glUseProgram(),统一状态被隐式改变。
嗯,从概念上讲,统一状态并不依赖于程序状态,而是统一状态是程序状态的 part 。当程序切换时,没有独立的统一状态可以切换,只有各个程序的统一值(当前活动程序的值可以通过API访问)。
是否有书籍或网站列出了这些依赖项?
好吧,你最喜欢的OpenGL教程或书应该彻底告诉你各个对象类型,它们封装的状态以及它们如何相互作用。除此之外,OpenGL sepcification当然是最后一个词。
答案 1 :(得分:1)
到目前为止是否正确?
是。 Uniforrms 每个程序状态。
如果我们通过调用glUseProgram()来切换程序,则统一状态会被隐式更改。
嗯,不是真的。由于制服是按程序状态进行的,因此根本没有统一的状态。只是当前的程序已经改变。
是否有书籍或网站列出了这些依赖项?
此类事物的权威来源是OpenGL Specification,请参阅第23章“状态表”。