我用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);
...
}
答案 0 :(得分:0)
试试这个:
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)
...
}
答案 1 :(得分:0)
在glutPostRedisplay之前的时间片上让空闲产生任何左CPU周期:
void on_idle() {
#ifdef WIN32
Sleep(0); // zero sleep = yield
#else ifdef _POSIX_PRIORITY_SCHEDULING
sched_yield(); // #include <sched.h>
#endif
glutPostRedisplay();
}
答案 2 :(得分:0)
我不太明白你的问题......你的意思是什么“你希望你的窗户一次又一次地重绘”?
GLUT通过glutMainLoop()函数自行调用显示回调函数(通常问题是反过来......人们会问他们如何以编程方式离开无限循环......这对于GLUT是不可能的,但是不使用FreeGLUT)
无需将重新显示放在空闲功能中,只有在没有其他任何事情发生时才会调用...