OpenGL:如何控制渲染使其空闲?

问题描述 投票:0回答:1

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

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

当前设计:我有一个渲染 while 循环一直在运行。如果我停止 while 循环,那么内容将渲染一次并消失。

问题:有没有办法达到目标?有谁可以指点一下吗

c++ opengl
1个回答
3
投票

您可以使用 OpenGL 进行渲染以响应系统的绘制事件,而不是像许多 OpenGL 教程教您的那样在事件循环中进行渲染。如果您知道自己的窗口内容已更改(例如由于对鼠标单击的反应),您也可以使自己的窗口无效。事实上,这是在窗口中绘制除延迟敏感应用程序之外的任何内容的正确方法。

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

  • 使用 WinAPI,您可以在
    WM_PAINT
    上渲染并使用
    InvalidateRect
    使其无效。
  • 使用 Xlib,您可以在
    Expose
    上渲染并使用 IDK 使其失效。
  • 使用 Qt,您可以在
    QOpenGLWindow::paintGL
    中渲染并使用
    update()
    使其无效。
  • 使用 GLUT 时,您会在
    glutDisplayFunc
    中渲染并使用
    glutPostRedisplay
    使其失效。

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

© www.soinside.com 2019 - 2024. All rights reserved.