我想知道OpenGL VAO中存储了什么状态。我知道VAO包含与缓冲顶点的顶点规范有关的状态(缓冲区中包含哪些属性,绑定了哪些缓冲区,...)。为了更好地了解VAO的正确用法,我想确切知道它们的状态。
我如何假设应使用VAO
通过简单的示例,我了解到VAO的正确用法如下:
设定
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
渲染图
Bind VAO
---- Draw
Unbind VAO
据此,我假设至少顶点缓冲区绑定和顶点属性规范存储在VAO中。但是我不确定这种使用模式如何扩展到(多个)纹理和(多个)着色器程序起作用的情况。是主动着色器程序存储在VAO?并且纹理绑定(及其采样/包装设置)也存储在VAO中吗?同上制服?
因此,我的问题是:
- OpenGL VAO中存储了什么确切状态?(VBO绑定,属性规范,活动着色器程序,纹理绑定,纹理采样/包装设置,制服...?)
- 如何在更复杂的渲染设置中正确使用VAO,其中包含(多个)纹理以及相关的采样/包装设置,(多个)着色器程序和均匀性?