2011-01-05 53 views
0

我使用GLUT和OPENGL在C語言中進行編程,我希望我的窗口一次又一次地重繪。我知道我可以用glutPostRedisplay()來放棄,如果我把它放在Glut的閒置函數中,我的電腦就會滯後。opengl + glut glutPostRedisplay在哪裏?

我的代碼是繼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

試試這個:

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) 
    ... 
} 
+0

一些運行後,計時器停止.. – 2011-01-05 20:24:36

+0

後on_timer ISN」 t再叫:/ – 2011-01-05 20:25:50

+0

偶爾在我的系統上也有點不習慣。不知道該告訴你:( – genpfault 2011-01-05 21:44:51

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(); 
} 
0

我不太明白你的問題......你的意思是「你想讓你的窗口重新繪製自己然後再次」 ?

GLUT通過glutMainLoop()函數自動調用顯示回調函數(通常問題是相反的......人們問他們如何以編程的方式離開無限循環..這對於GLUT來說是不可能的,但與FreeGLUT)

沒有必要把再顯示在空閒功能,在沒有其他正在發生的事情只是叫...

4倍