c++ - glFinish() 期间的 CPU 使用率

标签 c++ qt opengl

上下文:我正在测量 Qt 测试应用程序图形渲染期间的 cpu 使用情况。渲染是通过 Qt Quick 模块完成的,该模块使用基于 OpenGL 的专用场景图。

环境:我在运行 Windows CE 的移动面板上运行测试,并使用 Celog Event Tracker 跟踪 CPU 事件。

问题:当 QQuickWindow 发出信号 afterRendering() 和 frameSwapped() 时,我调用了 glFinish() 函数。 由于 glFinish() 的工作是等待所有以前的 opengl 命令完成,我知道 CPU 应该只是在等待 GPU 完成任务。因此,我希望在该调用期间的 CPU 使用率非常低。 但是,这不是我在 celog 跟踪器上观察到的情况。我可以观察到,在 glFinish() 时间范围内,属于测试应用程序的一些线程仍在使用 CPU。最后,CPU 使用率与渲染循环的其余部分在同一范围内。

所以我想知道,是否有对 glFinish() 运行时正在使用的 CPU 的解释?

最佳答案

OpenGL 采用异步执行模型。 OpenGL 命令在渲染命令管道中排队,管道可能根本不会执行,并且排队的命令处于休眠状态,直到通过使用 glFlush 强制刷新管道来执行管道。或进行同步 OpenGL 调用,这会导致隐式刷新并等待 glFinish (或 …SwapBuffers )。

因此,如果在调用 glFlush 后 CPU 和 GPU 变得繁忙,这并不奇怪。 .

关于c++ - glFinish() 期间的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870111/

相关文章:

Java OpenGL 仅蓝色纹理

c++ - OpenGL:仅获取模板缓冲区而不获取深度缓冲区?

c++ - Visual Studio 2012 RC 中的 Windows 窗体 CLR 应用程序?

c++ - 何时使用 DBL_EPSILON/epsilon

Qt 通过 TCP 套接字实时流式传输音频

qt - QVBoxLayout : How to align widgets to the top using Qt designer

c++ - 复制初始化和直接初始化有区别吗?

c++ - STL 算法的谓词

qt - 如何在QMessageBox中显示图标?

c++ - 为什么我总是使用 openGL 2.1 版?[openGL/SDL]