glVertexAttribDivisor 存储在哪里 - VAO、VBO 或全局状态?

Where is glVertexAttribDivisor stored - VAO, VBO or global state?

本文关键字:全局 状态 VBO 存储 在哪里 VAO glVertexAttribDivisor      更新时间:2023-10-16

这是一个示例代码:-

unsigned int instanceVBO;
glGenBuffers(1, &instanceVBO);
glBindBuffer(GL_ARRAY_BUFFER, instanceVBO);
glBindVertexArray(VAO);
...
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec2) * 100,
&translations[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0); 
... ... ... 
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, instanceVBO);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0);
glBindBuffer(GL_ARRAY_BUFFER, 0);   
glVertexAttribDivisor(2, 1);   //<--- who own this setting?
//^ mostly copied from https://learnopengl.com/Advanced-OpenGL/Instancing

谁拥有glVertexAttribDivisor设置?(VAO/实例VBO/全局状态)

https://gamedev.stackexchange.com/questions/99236/what-state-is-stored-in-an-opengl-vertex-array-object-vao-and-how-do-i-use-the#comment174555_99238 中的注释表明它存储在 VBO 中。

但是,注释与上述代码相矛盾(?),后者在解除绑定调用glVertexAttribDivisor(2, 1)glBindBuffer(GL_ARRAY_BUFFER, 0);

如果您也愿意提供参考,我将不胜感激,我可以阅读更多关于:
哪些设置/状态由Opengl的哪个东西(VAO/VBO/等)拥有

顶点数组除数 (VERTEX BINDING DIVISOR) 存储在顶点数组对象状态向量中,分别针对每个顶点属性(如启用状态、偏移量、步幅等)。

存储在VAO中的状态列在表23.3:顶点数组对象状态的规范中。
VAO 在 OpenGL 4.6 API 核心配置文件规范 - 10.3.1 顶点数组对象中指定。

另请参阅顶点规范 - 实例化数组