c++ - OpenGL:我如何控制渲染以使其空闲?
问题描述
比如说,我的应用程序有一个 3D 窗口,它使用 OpenGL渲染了数百万个三角形的锡模型。
目标:对于用户的一些操作,不需要更新3D窗口。3D 视图可以与先前渲染的内容保持空闲,而无需重复计算旋转/平移/缩放/纹理的东西。我认为这将节省大量 CPU 和 GPU 时间。
当前设计:我一直在运行一个渲染while循环。如果我停止 while 循环,则内容会呈现一次并消失。
问题:有没有办法实现目标?谁能给个方向?
解决方案
当系统向您发送重新绘制窗口的事件时,您可以仅使用 OpenGL 来渲染您的窗口,而不是使用连续的渲染循环。此外,如果您知道自己的窗口内容发生了变化(例如,由于对鼠标单击的反应),您将使其无效。事实上,对于延迟敏感的应用程序以外的任何应用程序,这是在窗口中绘制的正确方法。
确切的细节在很大程度上取决于您用于创建窗口的 API。例如,
- 使用 WinAPI,您可以
WM_PAINT
使用InvalidateRect
. - 使用 Xlib,您可以
Expose
使用 IDK 进行渲染并使其无效。 - 使用 Qt,您可以
QOpenGLWindow::paintGL
使用update()
. - 使用 GLUT,您可以
glutDisplayFunc
使用glutPostRedisplay
.
... 等等。这无论如何都不是 OpenGL 特定的。
推荐阅读
- javascript - 使用 Node JS 对 Google API 进行身份验证
- ffmpeg - 将 MOV 转换为 WEBP
- xcode - 即使在构建和捆绑成功之后,也无法在 ios Simulator 上启动或安装应用程序
- powerbi - Power BI - 使用 DAX 添加/减去工作时间
- c++ - 用两个QTreeWidget拖放,根据他们之前设置的数据过滤QTreeWidgetItem的
- python - 如何增加谷歌语音api中的收听时间?
- excel - 如何使用包含一些公式的 excel vba 定义命名范围
- automapper - AutoMapper:ProjectTo 在单元测试中调用时不起作用
- python - python collections.defaultdict 分配但不查找
- vue.js - 如何不将 vue 源代码包含到 webpack 构建中