gpt4 book ai didi

c - glDisplayFunc(RenderScene) 回调是否会在以下代码中导致竞争条件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:55 25 4
gpt4 key购买 nike

我正在阅读 OpenGL Superbible第 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 enters the GLUT event processing loop. This routine should be called at most once in a GLUT program. Once called, this routine will never return. It will call as necessary any callbacks that have been registered

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

关于c - glDisplayFunc(RenderScene) 回调是否会在以下代码中导致竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com