• 【转】使用glut定时器控制帧率


    写了个程序,运行很慢,帧率很低,不知道什么原因,以为程序代码太多,执行太慢,经过不断的调试和验证,才弄明白。现在记录一下:

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

    (1)如果用定时器的话,初始的时候注册一个定时器的回调函数,原型是
    glutTimerFunc(unsigned int
    millis, void (*func)(int value), int value);
    参数对应关系为:glutTimerFunc(毫秒数,
    回调函数指针, 区别值);
    (2)写自己的回调函数 void OnTimer(int
    value);
    用value区分是哪个定时器
    (3)在函数里改变和位置有关的变量,然后调用glutPostRedisplay();用来重绘
    (4)最后再次调用glutTimerFunc,因为glut的定时器是调用一次才产生一次定时,所以如果要持续产生定时的话,在定时函数末尾再次调用glutTimerFunc

  • 相关阅读:
    为何url地址不是直接发送到服务器,而是被编码后再发送
    http请求分析
    Nginx+Php不支持并发,导致curl请求卡死(Window环境)
    Vue开发调试神器 vue-devtools
    什么是闭包?闭包的优缺点?
    Nginx 504 Gateway Time-out分析及解决方法
    HTTP请求8种方法
    MySQL查询缓存总结
    MySQL单表多次查询和多表联合查询,哪个效率高?
    分布式系统一致性问题解决实战
  • 原文地址:https://www.cnblogs.com/lzhitian/p/2818502.html
Copyright © 2020-2023  润新知