qt - QGLWidget 比 QWidget 慢

标签 qt opengl windows-7-x64

问题主要是在标题中确定的。我尝试了 Qt 的示例( 2dpainting )并注意到,如果我尝试在 QGLWidget 上绘制,相同的代码会消耗更多的 CPU 功率,而如果我尝试在 QWidget 上简单地绘制,则消耗更少的 CPU 功率。我认为 QGLWidget 应该更快。还有一个更有趣的现象:在 QGLWidget 中,抗锯齿提示似乎被忽略了。

OpenGL版本:3.3.0

那这是为什么呢?

最佳答案

首先,请注意您链接到的文档底部的这段文字:

The example shows the same painting operations performed at the same time in a Widget and a GLWidget. The quality and speed of rendering in the GLWidget depends on the level of support for multisampling and hardware acceleration that your system's OpenGL driver provides. If support for either of these is lacking, the driver may fall back on a software renderer that may trade quality for speed.

抛开这一点,硬件渲染并不总是保证比软件渲染更快;这完全取决于渲染器被要求做什么。

软件可以超越硬件的一个例子是渲染项目的目标不断变化。因此,如果您有一个绘图程序,该程序绘制一条由不断移动的鼠标创建的线,并且它是通过向每帧绘制的画家路径添加点来实现的,则硬件渲染器将随着新点而不断受到管道停顿的影响添加到画家路径中。从停顿开始设置图形管道需要时间,这不是软件渲染器必须处理的事情。

在您询问的 2dPainting 示例中,执行绘制调用的辅助类正在执行大量不必要的工作;保存画家状态;设置笔/画笔;旋转画家;恢复刷子。所有这些在硬件上的开销都比软件上的开销更大。要真正看到硬件渲染优于软件,在渲染循环(绘制函数)之外预先计算对象的位置,然后不执行任何操作,将实际渲染放入绘制函数中,可能会在这里显示出明显的差异。

最后,关于抗锯齿,您链接到的文档指出:“如果系统的 OpenGL 驱动程序支持所需的扩展,QGLWidget 也将使用抗锯齿”

关于qt - QGLWidget 比 QWidget 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234191/

相关文章:

php - MongoDB php 扩展不适用于 Windows 7

c++ - QTimer 不会前进屏幕

c++ - 使用 SIGSEGV 初始化类成员应用程序崩溃后

qt - 如何在 QML 中制作可调整大小的矩形?

WPF 菜单未正常定位

c++ - RenderTarget->GetSize 不工作

c++ - 提取字形字距调整信息 C++

java - LWJGL3 和 GLEW

c++ - 使用 C++ 在 OpenGL 中使用键盘移动 3D 形状

opengl - 如何将 OpenGL 显示(由 OpenGL 创建的窗口)设置为最大化?