glutTimerFunc() 不限制帧率

glutTimerFunc() not limiting framerate

glutTimerFunc 不会延迟它只会永远循环。像fxp。而(1)。 我做错了什么吗?还是兼容性问题? 我在 gcc 中使用 arch linux x64。我一直在混合使用 32 位程序和 64 位程序。
我正在尝试制作一个程序来检查输入,同时在延迟
下不断更新帧 我的包括:

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

不用担心其他功能都很干净:)
代码之前可以用,不知道为什么现在不行了。

你的mainloop应该叫init。它所做的只是设置过剩回调。与其在空闲函数中调用 glutPostRedisplay,不如在 timer 函数中调用它。换句话说,不要调用 glutIdleFunc(timer);。相反,自己调用 timer() 一次并让它为自己添加一个计时器 glutTimerFunc (30 , timer, 0);.

但是,我建议您自己为帧限制器计时,因为它会更准确。我正是为此写了 this answer