c - glutTimerFunc() 不限制帧率

标签 c opengl glut archlinux

glutTimerFunc 不会延迟它只是永远循环。像fxp。 while(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正是为了这个。

关于c - glutTimerFunc() 不限制帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022444/

相关文章:

c++ - 在未加载上下文的情况下在对象构造函数中使用 OpenGL 函数

将整数常量转换为指针类型

c++ - Qt 和 OpenGL 窗口 - 调整大小时闪烁

opengl - 重新创建窗口而不破坏上下文

OpenGL,过剩: How can I tell if a gamepad key is active (pressed)?

opengl - 如何在 glut 中指定键盘的方向键?

python - gdb 找到调试信息但不能下断点

c - 函数 _IO_file_init 和 _IO_file_fopen 的定义

c - 使用 ttf 库 SDL C 的段错误

java - JOGL 无法弄清楚为什么绘制的线没有出现