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。
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。