1

私はOpenGLSuperbible4thedを読んでいます。第2章では、サンプルコードは、次のようにコールバックとそれに続くクリアカラーを設定します。

main()
{
//...
glDisplayFunc(RenderScene);
SetupRC();
//..
}    

void RenderScene(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
}

void SetupRC(void)
{
  glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}

ここで競合状態が発生しているglClear可能性はありますか?以前に実行される可能性がありますglClearColorか?

4

1 に答える 1

4

glutMainLoop()同じスレッドで実行され、をglDisplayFunc()呼び出すとGL関数が呼び出されないため、競合状態ではありません(コールバックへのポインタのみが保存されます)。

ドキュメントから:

glutMainLoopGLUTイベント処理ループに入ります。このルーチンは、GLUTプログラムで最大1回呼び出す必要があります。一度呼び出されると、このルーチンは決して戻りません。登録されているコールバックを必要に応じて呼び出します

OpenGLは、同じスレッドで作成されたGLコンテキストにのみレンダリングできます。したがって、との呼び出しglClearColor()RenderScene()同じスレッドで呼び出されます。の呼び出しglutMainLoop()は後で呼び出されるためmain()、はの前にglClearColor()厳密に呼び出されます。glClear()RenderScene()

于 2012-07-02T13:06:21.040 に答える