【问题标题】:OpenGL 3.x - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) and VAOsOpenGL 3.x - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER) 和 VAO
【发布时间】:2012-12-03 12:24:30
【问题描述】:

我有一个初始化我的 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 后是否需要解除GL_ELEMENT_ARRAY_BUFFER 的绑定,或者它的状态是否与VAO“绑定”? (所以如果我解除绑定 VAO,GL_ELEMENT_ARRAY_BUFFER 也将解除绑定)?

【问题讨论】:

    标签: c++ opengl opengl-3


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      当你设置顶点属性指针时绑定你的顶点数组。 所以基本上不要解开你的顶点数组,因为你只有一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-18
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        相关资源
        最近更新 更多