opengl + glut glutPostRedisplay在哪里?

我用C语言编写GLUT和OPENGL,我希望我的窗口一次又一次地重绘自己。 我知道我可以用glutPostRedisplay()渲染,如果我把它放在Glut的闲置函数中我的电脑滞后。

我的代码是关注atm

 void on_idle() { glutPostRedisplay(); } void on_draw() { ... glClearColor(1.f, 1.f, 1.f, 1.f); glClear(GL_COLOR_BUFFER_BIT); ... glFlush(); } int main(int argc, char** argv) { ... glutDisplayFunc(&on_draw); glutIdleFunc(&on_idle); ... } 

试试这个:

 void on_timer(int value) { glutPostRedisplay(); glutTimerFunc(33, on_timer, 0); } void on_draw() { ... glClearColor(1.f, 1.f, 1.f, 1.f); glClear(GL_COLOR_BUFFER_BIT); ... glFlush(); } int main(int argc, char** argv) { ... glutDisplayFunc(on_draw); glutTimerFunc(33, on_timer, 0) ... } 

在glutPostRedisplay之前的时间片上使空闲产生任何左CPU周期:

 void on_idle() { #ifdef WIN32 Sleep(0); // zero sleep = yield #else ifdef _POSIX_PRIORITY_SCHEDULING sched_yield(); // #include  #endif glutPostRedisplay(); } 

我不太明白你的问题……你的意思是“你希望你的窗户一次又一次地重绘”?

GLUT通过glutMainLoop()函数自行调用显示回调函数(通常问题是反过来……人们问他们如何以编程方式离开无限循环……这对于GLUT是不可能的,但不是FreeGLUT )

无需将redisplay放在idle函数中,只有在没有其他任何事情发生时才调用它…