从post我了解glutPostRedisplay API的功能。据了解,此API不会调用回调,而只是设置一个标志,以便主循环下次调用其回调。伪代码是:
void onNewFrame(int x, int y)
{
// Do calculations
std::cout << " New Frame " << endl;
glutPostRedisplay();
}
void display()
{
std::cout << " Display " << endl;
// Calculations & opengl operations
}
此处display()
是在glutDisplayFunc()
中向main()
注册的API。在控制台中执行时,我可以看到“New Frame”按预期打印但无法看到“显示”被打印。 glutPostRedisplay()
API会设置标志,但在我的情况下,只有在有鼠标事件或窗口大小发生变化时才会执行display()
。
那为什么会这样呢?是因为主循环没有被执行,直到鼠标事件或窗口调整大小?
答案 0 :(得分:0)
在进一步调查中,我发现问题在于计算机的功能。当我在高配置PC上重新运行相同的代码时,重新渲染非常快。在这种情况下,经常调用显示功能。