Kai*_*aan 3 c++ opengl opengl-3
我有一个初始化我的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);
Run Code Online (Sandbox Code Playgroud)
然后是一个单独的绘图方法;
glBindVertexArray(mVAO);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_SHORT, &mIndexBuffer);
glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)
GL_ELEMENT_ARRAY_BUFFER在我打电话之后是否需要取消绑定glDrawElements或者它的状态是否与VAO绑定?(所以如果我解开VAO,那么GL_ELEMENT_ARRAY_BUFFER也将是未绑定的)?
GL_ELEMENT_ARRAY_BUFFER与VAO状态有关.我引用OpenGL 3.3规范:"生成的顶点数组对象是一个新的状态向量,包含表6.4和6.5中列出的所有状态值." 表6.4包含ELEMENT ARRAY BUFFER BINDING.所以不,你不需要解开它.
此外,您可能希望NULL作为glDrawElements示例中的最后一个参数传递,因为该地址相对于绑定元素数组缓冲区.