gpt4 book ai didi

c++ - OpenGL 3.x - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) 和 VAO

转载 作者:太空狗 更新时间:2023-10-29 20:15:16 25 4
gpt4 key购买 nike

我有一个初始化我的 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);

我是否需要在调用 glDrawElements 后取消绑定(bind) GL_ELEMENT_ARRAY_BUFFER 或者它的状态是否“绑定(bind)”到 VAO? (因此,如果我解除绑定(bind) VAO,GL_ELEMENT_ARRAY_BUFFER 也将解除绑定(bind))?

最佳答案

GL_ELEMENT_ARRAY_BUFFER 与 VAO 状态相关联。我引用 OpenGL 3.3 规范:“生成的顶点数组对象是一个新的状态 vector ,包含表 6.4 和 6.5 中列出的所有状态值。”表 6.4 包含 ELEMENT ARRAY BUFFER BINDING。所以不,您不需要解除绑定(bind)。

此外,您可能希望在示例中将 NULL 作为最后一个参数传递给 glDrawElements,因为该地址是相对于绑定(bind)元素数组缓冲区的。

关于c++ - OpenGL 3.x - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) 和 VAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13683205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com