glutTimerFunc()不限制帧率

时间:2015-06-24 09:12:38

标签: c opengl glut archlinux

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();
}
不要担心其他功能是否干净:)
代码工作较早我不知道它为什么现在不起作用。

1 个答案:

答案 0 :(得分:2)

您的mainloop应该被称为init。所有这一切都是设置过剩的回调。您应该在glutPostRedisplay函数中调用它,而不是在空闲函数中调用timer。换句话说,请勿致电glutIdleFunc(timer);。相反,请自己调用timer()并让它为自己添加一个计时器glutTimerFunc (30 , timer, 0);

但是,我建议你自己做一个帧限制器的时间,因为它会更准确。我准确地写了this answer