opengl + glut glutPostRedisplay在哪里?

时间:2011-01-05 19:14:15

标签: c opengl draw glut

我用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);
    ...
}

3 个答案:

答案 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)

无需将重新显示放在空闲功能中,只有在没有其他任何事情发生时才会调用...