3

私の質問は、シェーダーを使用せずに glDrawElements を使用できますか?

次のように vbo を生成します。

    glGenBuffers(1, &vertexId_);
    glBindBuffer(GL_ARRAY_BUFFER, vertexId_);
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*((tess.x + 1) * (tess.y + 1)), &pVertex[0].p.x, GL_STATIC_DRAW);


    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) vOffset_);
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) nOffset_);
    glEnableVertexAttribArray(2);
    glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid *) tOffset_);

    glGenBuffers(1, &indexId_);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexId_);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned short)*idxCount_, &pIndices[0], GL_STATIC_DRAW);

    glBindVertexArray(0);

問題は、描画するシェーダーをバインドせずに glDrawElements を使用できるかどうかです。私はGL4.0を使用しています

4

1 に答える 1

5

OpenGL 4.0 には固定パイプラインがありません。GPU に送信するデータ (頂点) をどう処理するかをシェーダーに指示する必要があります。

シェーダーを使い始める方法については、次のような多くのリソースがあります: http://nehe.gamedev.net/article/glsl_an_introduction/25007/

編集:他の人が以下で指摘したように、これは完全に真実ではありません。互換性プロファイルを使用し、サポートされている場合は固定パイプラインを使用できます。http://www.opengl.org/registry/doc/glspec40.compatibility.20100311.pdf

于 2013-05-11T20:49:14.707 に答える