假设我的应用程序有一个 3D 窗口,使用 OpenGL 渲染数百万个三角形的锡模型。
目标:对于用户的某些操作,不需要更新3D窗口。 3D 视图可以只保留先前渲染的内容,无需重复计算旋转/平移/缩放/纹理。我认为这将节省大量 CPU 和 GPU 时间。
当前设计:我有一个渲染 while 循环一直在运行。如果我停止 while 循环,那么内容将渲染一次并消失。
问题:有没有办法达到目标?有谁可以指点一下吗
您可以使用 OpenGL 进行渲染以响应系统的绘制事件,而不是像许多 OpenGL 教程教您的那样在事件循环中进行渲染。如果您知道自己的窗口内容已更改(例如由于对鼠标单击的反应),您也可以使自己的窗口无效。事实上,这是在窗口中绘制除延迟敏感应用程序之外的任何内容的正确方法。
具体细节很大程度上取决于您用于创建窗口的 API。例如,
WM_PAINT
上渲染并使用 InvalidateRect
使其无效。Expose
上渲染并使用 IDK 使其失效。QOpenGLWindow::paintGL
中渲染并使用 update()
使其无效。glutDisplayFunc
中渲染并使用 glutPostRedisplay
使其失效。...等等。这无论如何都不是 OpenGL 特定的。