1

I'm reading OpenGL Superbible 4th ed. In Chapter 2, the example code sets up the callback followed by the clear color as follows:

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

Is it posisble that we have a race condition here, where glClear might be executed before glClearColor?

4

1 回答 1

4

这不是竞争条件,因为glutMainLoop()在同一个线程中运行并调用glDisplayFunc()不会调用任何 GL 函数(它只会保存指向回调的指针)。

从文档:

glutMainLoop进入 GLUT 事件处理循环。该例程在 GLUT 程序中最多应调用一次。一旦被调用,这个例程将永远不会返回。它将根据需要调用任何已注册的回调

OpenGL 只能渲染到在同一线程中创建的 GL 上下文。因此,对glClearColor()和的调用RenderScene()将在同一个线程中调用。由于调用 toglutMainLoop()稍后在 your 中调用main(),因此glClearColor()将严格在glClear()in之前调用RenderScene()

于 2012-07-02T13:06:21.040 回答