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

时间:2019-08-25 06:25:21

标签: c++ opengl

这是示例代码:-

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 / instanceVBO /全局状态)

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 / etc)拥有哪个设置/状态。

1 个答案:

答案 0 :(得分:3)

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

Table 23.3: Vertex Array Object State中的规范中列出了VAO中存储的状态。
VAO在OpenGL 4.6 API Core Profile Specification - 10.3.1 Vertex Array Objects中指定。

另请参阅Vertex Specification - Instanced arrays