我有一个非常基本的 OpenGL 应用程序,它只是从存储在缓冲区中的数据中绘制一个三角形。然而,运行几分钟后,计算机运行非常热,甚至比运行完整游戏时更热。
如何限制应用程序生成的工作负载?sleep
除了ing 在主循环中还有其他方法吗?
首先,您应该检查是否启用了 V-Sync: 对主循环迭代之间的持续时间进行计时,以获得执行主循环和重绘功能的频率。除非您正在执行系统基准测试,否则应启用垂直同步,并且最终调用显示函数的主循环应以最大显示刷新频率运行。
如果没有启用 V-Sync,即您获得了极高的帧率(大于 120Hz),您应该首先在图形驱动程序中启用 V-Sync。
如果您的程序仍然消耗过多的 CPU 时间,请确保您不是在轮询,而是在等待主循环中的事件。作为 Windows 系统上的最后一项措施,您应该Sleep(1);
在调用后添加一个…SwapBuffers
(注意大写字母S
),它可靠地为系统的其余部分提供 CPU 时间。
如果您使用的是 glut,您可以使用glutMainLoop()
which 应该为您解决这个问题。
但是不要忘记注册更新和渲染方法以及键盘和鼠标的句柄方法
glutDisplayFunc(updateGL);
glutReshapeFunc(Reshape);
glutIdleFunc(idle);
glutKeyboardFunc(keyboardEvent);
glutMouseFunc(mouseEvent);
glutMotionFunc(mouseMoveEvent);
glutCloseFunc(close);
参数是函数的名称