0

我有一个非常基本的 OpenGL 应用程序,它只是从存储在缓冲区中的数据中绘制一个三角形。然而,运行几分钟后,计算机运行非常热,甚至比运行完整游戏时更热。

如何限制应用程序生成的工作负载?sleep除了ing 在主循环中还有其他方法吗?

4

2 回答 2

2

首先,您应该检查是否启用了 V-Sync: 对主循环迭代之间的持续时间进行计时,以获得执行主循环和重绘功能的频率。除非您正在执行系统基准测试,否则应启用垂直同步,并且最终调用显示函数的主循环应以最大显示刷新频率运行。

如果没有启用 V-Sync,即您获得了极高的帧率(大于 120Hz),您应该首先在图形驱动程序中启用 V-Sync。

如果您的程序仍然消耗过多的 CPU 时间,请确保您不是在轮询,而是在等待主循环中的事件。作为 Windows 系统上的最后一项措施,您应该Sleep(1);在调用后添加一个…SwapBuffers(注意大写字母S),它可靠地为系统的其余部分提供 CPU 时间。

于 2013-06-08T20:03:03.357 回答
0

如果您使用的是 glut,您可以使用glutMainLoop()which 应该为您解决这个问题。

但是不要忘记注册更新和渲染方法以及键盘和鼠标的句柄方法

  glutDisplayFunc(updateGL);
  glutReshapeFunc(Reshape);
  glutIdleFunc(idle);
  glutKeyboardFunc(keyboardEvent);
  glutMouseFunc(mouseEvent);
  glutMotionFunc(mouseMoveEvent);
  glutCloseFunc(close);

参数是函数的名称

于 2013-06-08T17:04:47.920 回答