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);

そして、別の描画方法。

    glBindVertexArray(mVAO);
    glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_SHORT, &mIndexBuffer);
    glBindVertexArray(0);

GL_ELEMENT_ARRAY_BUFFERVAOへの呼び出し後にバインドを解除する必要がありglDrawElementsますか、それともその状態はVAOに「関連付けられています」か?(つまり、VAOのバインドを解除すると、バインドも解除GL_ELEMENT_ARRAY_BUFFERされます)?

4

2 に答える 2

7

GL_ELEMENT_ARRAY_BUFFERVAO 状態に関連付けられています。OpenGL 3.3 仕様を引用します。「結果の頂点配列オブジェクトは、表 6.4 と 6.5 にリストされているすべての状態値を含む新しい状態ベクトルです。」表 6.4 には が含まれていますELEMENT ARRAY BUFFER BINDING。いいえ、バインドを解除する必要はありません。

さらに、アドレスはバインドされた要素配列バッファーに関連しているため、おそらくNULL最後のパラメーターとして例に渡したいと思うでしょう..glDrawElements

于 2012-12-03T14:08:13.797 に答える
0

頂点属性ポインターを設定するときに、頂点配列をバインドします。基本的に、頂点配列は 1 つしかないため、バインドを解除しないでください。

于 2012-12-03T12:29:55.520 に答える