我正在阅读第4版。在第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
之前执行? 最佳答案
这不是竞争条件,因为glutMainLoop()
在同一线程中运行,调用glDisplayFunc()
不会调用任何GL函数(它只保存指向回调的指针)。
从文档中:glutMainLoop
进入GLUT事件处理循环。
在一个GLUT程序中,这个例程最多应该调用一次。
一旦调用,此例程将永远不会返回。
它将根据需要调用任何已注册的回调
OpenGL只能呈现给在同一线程中创建的GL上下文。因此,对glClearColor()
和RenderScene()
的调用将在同一线程中调用。由于对glutMainLoop()
的调用稍后在main()
中调用,因此glClearColor()
将严格在glClear()
中的RenderScene()
之前调用。