写了个程序,运行很慢,帧率很低,不知道什么原因,以为程序代码太多,执行太慢,经过不断的调试和验证,才弄明白。现在记录一下:
在glut函数中:
通过函数glutDisplayFunc(Draw);来设置需要显示的画面函数,虽然函数中有glutSwapBuffers();和glFlush();函数来刷新输出,但不会不断进行刷新。
如果需要不断刷新,则需要进行如下设置:
glutDisplayFunc(Draw);
glutIdleFunc(Draw); //增加idle时候的函数
但是这样的话,如果函数内容不多,则会刷新过快。于是要通过glut的定时器函数来控制帧率,定时进行glutPostRedisplay();
例程如下:
使用glutTimerFunc是因為我想要讓他固定每16ms更新畫面一次(FPS大約60)
void main()
{
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );
glutInitWindowSize( 640,480 );
WinNumber=glutCreateWindow( "Test" );
glutDisplayFunc(display);
。。。。。。
glutTimerFunc(16, OnTimer, 1);
glutMainLoop();
}
void OnTimer(int value)
{
alpha++;
alpha=(alpha%256);
glutPostRedisplay();
glutTimerFunc(16, OnTimer, 1);
}
void display()
{
..........上略...............
glutSwapBuffers();
}