1

基本的なOpenGLプログラムのどこでシェーダーが実行されるかを理解しようとしています。シェーダープログラムがビデオカードで実行されていることはわかっているので、メインループと並行していると思います。しかし、私は2つの間のリンクがどこで発生するかを理解したいと思います。これが私の描画関数です:

void Draw(ESContext *esContext)
{
    GLfloat vVertices[] = {0.0f, 0.5f, 0.0f,
                          -0.5f, -0.5f, 0.0f,
                           0.5f, -0.5f, 0.0f};


    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
    glEnableVertexAttribArray(0);

    glDrawArrays(GL_TRIANGLES, 0, 3);
    eglSwapBuffers(esContext->eglDisplay, esContext->eglSurface);
}

glDrawArraysが呼び出された直後に、シェーダープログラムが初めて実行されますか?また、メインループが数ミリ秒間停止した場合でも、同じ3つの頂点をループして処理し続けるのでしょうか。つまり、ビデオカードは新しい命令を受け取るまでこれらの3つの頂点をループして処理し続けるのでしょうか、それとも一度処理してからglDrawArraysまたは同様のコマンドからの別の呼び出しを待つのでしょうか。

4

1 に答える 1

1
  • はい、シェーダープログラムは、glDrawArraysを最初に呼び出してからしばらくしてから実行されます。
  • いいえ、ループを継続しません。キューに入れられたもの(この場合は1つの三角形)をアクティブなフレームバッファーに描画し、キューに入れられた他の作業を続行し、次の命令が受信されるまでアイドル状態になります。
于 2012-04-10T18:30:00.300 に答える