Mor*_*bel 1 c++ opengl vbo vao
在OpenGL的维基:顶点规格指出:
注:该
GL_ARRAY_BUFFER绑定是不是该VAO的国家的一部分!我知道这很令人困惑,但事实就是如此.
下面是我如何使用VAO,它似乎按预期工作.这有什么不对?我对OpenGL(或OpenGL Wiki),OpenGL驱动程序(OSX 10.9)或OpenGL Wiki的理解?
// ------ Pseudo-code ------
// setup
[...]
glBindVertexArray(vertexArrayObjectIdx1);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBufferId1);
for each vertex attribute
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
glBindVertexArray(vertexArrayObjectIdx2);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBufferId2);
for each vertex attribute
glEnableVertexAttribArray(...);
glVertexAttribPointer(...);
// rendering
[...]
glBindVertexArray(vertexArrayObjectIdx1);
glDrawElements(...);
glBindVertexArray(vertexArrayObjectIdx2);
glDrawElements(...);
Run Code Online (Sandbox Code Playgroud)
这意味着,当你重新绑定VAO在GL_ARRAY_BUFFER没有得到反弹
然而,glVertexAttribPointer它确实绑定了(然后)绑定GL_ARRAY_BUFFER到VAO中的正确属性,因此它可以像您想要的那样工作.
实际上他们可以定义glVertexAttribPointer为:
void glVertexAttribPointer(GLuint index?, GLint size?, GLenum type?, GLboolean normalized?, GLsizei stride?, uint bufferName, const GLvoid * pointer?);
Run Code Online (Sandbox Code Playgroud)
并消除它对边界的依赖GL_ARRAY_BUFFER.但事后才知道......
重要的是要记住,GL_ARRAY_BUFFER绘制并不重要,但顶点属性的界限是如此.
相反,GL_ELEMENT_ARRAY_BUFFER 它存储在VAO中
| 归档时间: |
|
| 查看次数: |
1353 次 |
| 最近记录: |