我有一种初始化VBO / VAO的方法:
glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
// setup VAO
glBindVertexArray(mVAO);
glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
然后是另一种绘图方法;
glBindVertexArray(mVAO);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_SHORT, &mIndexBuffer);
glBindVertexArray(0);
我需要在GL_ELEMENT_ARRAY_BUFFER
致电后glDrawElements
取消绑定,还是将其状态“绑定”到VAO? (所以如果我取消绑定VAO,GL_ELEMENT_ARRAY_BUFFER
也将被解除绑定)?
答案 0 :(得分:7)
GL_ELEMENT_ARRAY_BUFFER
与VAO状态相关联。我引用OpenGL 3.3规范:“生成的顶点数组对象是一个新的状态向量,包含表6.4和6.5中列出的所有状态值。”
表6.4包含ELEMENT ARRAY BUFFER BINDING
。所以不,你不需要解开它。
此外,您可能希望将NULL
作为示例中glDrawElements
的最后一个参数传递,因为该地址是相对于绑定元素数组缓冲区的。
答案 1 :(得分:0)
设置顶点属性指针时绑定顶点数组。 所以基本上只是不要取消绑定你的顶点数组,因为你只有一个。