首页 > 解决方案 > OpenGL:我如何控制渲染以使其空闲?

问题描述

比如说,我的应用程序有一个 3D 窗口,它使用 OpenGL渲染了数百万个三角形的锡模型。

目标:对于用户的一些操作,不需要更新3D窗口。3D 视图可以与先前渲染的内容保持空闲,而无需重复计算旋转/平移/缩放/纹理的东西。我认为这将节省大量 CPU 和 GPU 时间。

当前设计:我一直在运行一个渲染while循环。如果我停止 while 循环,则内容会呈现一次并消失。

问题:有没有办法实现目标?谁能给个方向?

标签: c++opengl

解决方案


当系统向您发送重新绘制窗口的事件时,您可以仅使用 OpenGL 来渲染您的窗口,而不是使用连续的渲染循环。此外,如果您知道自己的窗口内容发生了变化(例如,由于对鼠标单击的反应),您将使其无效。事实上,对于延迟敏感的应用程序以外的任何应用程序,这是在窗口中绘制的正确方法。

确切的细节在很大程度上取决于您用于创建窗口的 API。例如,

  • 使用 WinAPI,您可以WM_PAINT使用InvalidateRect.
  • 使用 Xlib,您可以Expose使用 IDK 进行渲染并使其无效。
  • 使用 Qt,您可以QOpenGLWindow::paintGL使用update().
  • 使用 GLUT,您可以glutDisplayFunc使用glutPostRedisplay.

... 等等。这无论如何都不是 OpenGL 特定的。


推荐阅读