QGLWidget比QWidget慢

时间:2013-10-07 20:32:21

标签: qt opengl windows-7-x64

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

OpenGL版本:3.3.0

那为什么呢?

1 个答案:

答案 0 :(得分:2)

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

  

该示例显示了相同的绘制操作   在Widget和GLWidget中的时间。渲染的质量和速度   GLWidget取决于多重采样和支持的级别   系统的OpenGL驱动程序提供的硬件加速。如果   对这些中的任何一个都缺乏支持,司机可能会退缩   可以用质量换取速度的软件渲染器。

除此之外,硬件渲染并不总能保证比软件渲染更快;这一切都取决于渲染器被要求做什么。

软件可以超越硬件的一个例子是,正在呈现的项目的目标是不断变化的。因此,如果你有一个绘图程序绘制由鼠标不断移动创建的线,并通过向每帧绘制的画家路径添加点来实现,则硬件渲染器将作为新点进行常量管道停顿被添加到画家路径。从停顿设置图形管道需要花费时间,这不是软件渲染器必须处理的事情。

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

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