上下文:我正在测量Qt测试应用程序的图形呈现期间的cpu使用情况。渲染是通过Qt Quick模块完成的,该模块使用基于OpenGL的专用场景图。
环境:我在运行Windows CE的移动面板上运行测试,并使用Celog事件跟踪器跟踪CPU活动。
问题:当QQuickWindow发出afterRendering()和frameSwapped()之后的信号时,我调用了glFinish()函数。 由于glFinish()作业是等待所有以前的opengl命令完成,我明白CPU应该等待GPU完成任务。因此,我希望在通话过程中CPU使用率非常低。 然而,这不是我用celog跟踪器观察到的。我可以观察到,在glFinish()时间范围内,属于测试应用程序的一些线程仍在使用CPU。最后,CPU使用率与渲染循环的其余部分处于相同的范围内。
所以我想知道,当glFinish()正在运行时,是否有使用CPU的解释?
答案 0 :(得分:0)
OpenGL采用异步执行模型。 OpenGL命令在渲染命令管道中排队,管道可能根本不执行,排队的命令处于休眠状态,直到管道执行被刷新管道强制glFlush
或进行同步OpenGL调用,导致隐式刷新并等待glFinish
(或…SwapBuffers
)。
因此,如果在调用glFlush
后事情在CPU和GPU上忙碌,那就不足为奇了。