2015-06-24 41 views
0

glutTimerFunc沒有做出延遲,它只是永遠循環。像fxp一樣。而(1)。 我有什麼問題嗎?還是兼容性問題? 我正在使用gcc的arch linux x64。我一直在混合64位的32位程序。
我試圖做一個程序,檢查輸入而延遲
我包括根據不斷更新的框架是:glutTimerFunc()不限制幀率

#include <GL/glut.h> 
#include <GL/glu.h> 
#include <stdio.h> 
#include <string.h> 

我的主要職責是:

void timer(void) 
{ 
    glutPostRedisplay(); 
    glutTimerFunc (30 , mainloop , 0); 
} 

int main() { 
    loadconfiguration(); 
    char *myargv [1]; 
    int myargc=1; 
    myargv [0]=strdup ("./file"); 
    glutInit(&myargc, myargv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
     glutInitWindowPosition(100, 100); 
     glutInitWindowSize(displayx, displayy); 
    printf("Making a window\n"); 
    winIDMain = glutCreateWindow("GL Game"); 
    mainloop(); 
} 
void mainloop(void){ 

    Initilize(); 
    glutSetWindow (winIDMain); 
    glutDisplayFunc (render); 
    glutReshapeFunc (reshape); 
    glutKeyboardFunc (keyboard); 
    glutMouseFunc (mouse); 
    glutIdleFunc (timer); 
    glutMainLoop(); 
} 

不要擔心其他功能是乾淨的:)
代碼早些時候工作,我不知道爲什麼現在不工作。

回答

2

您的mainloop應該叫做init。它所做的就是設置過量回調。不要在空閒功能中調用glutPostRedisplay,您應該在timer函數中調用它。換句話說,不要撥打glutIdleFunc(timer);。相反,請自己撥打timer(),讓它爲自己添加一個計時器glutTimerFunc (30 , timer, 0);

但是,我會建議你自己做一個幀限制器的時間,因爲它會更準確。我爲此寫了this answer