问题主要是在标题中确定的。我尝试了 Qt 的示例(二维绘画 http://harmattan-dev.nokia.com/docs/library/html/qt4/opengl-2dpainting.html)并注意到,如果我尝试在 QGLWidget 上绘制,相同的代码会消耗更多的 CPU 功率,而如果我尝试简单地在 QWidget 上绘制,则会消耗更少的 CPU 功率。我认为 QGLWidget 应该更快。还有一个更有趣的现象:在 QGLWidget 中,抗锯齿提示似乎被忽略了。
OpenGL版本:3.3.0
那么这是为什么呢?
首先,请注意您链接到的文档底部的这段文字:
该示例显示了在同一时间执行的相同绘画操作
Widget 和 GLWidget 中的时间。渲染的质量和速度
GLWidget 取决于多重采样的支持级别和
系统的 OpenGL 驱动程序提供的硬件加速。如果
如果缺乏对其中任何一个的支持,驱动程序可能会依赖于
可以牺牲质量换取速度的软件渲染器。
抛开这一点不谈,硬件渲染并不总是保证比软件渲染更快。这完全取决于渲染器被要求做什么。
软件可以超越硬件的一个例子是,如果渲染项目的目标不断变化。因此,如果您有一个绘图程序,该程序绘制一条由不断移动的鼠标创建的线,并且它是通过向每帧绘制的画家路径添加点来实现的,则硬件渲染器将随着新点而不断受到管道停顿的影响添加到画家路径中。从停顿开始设置图形管道需要时间,这不是软件渲染器必须处理的事情。
在您询问的 2dPainting 示例中,执行绘制调用的辅助类正在执行许多不必要的工作;保存画家状态;设置笔/画笔;旋转画家;恢复刷子。所有这些在硬件上的开销都比软件上的开销更大。要真正看到硬件渲染优于软件,在渲染循环(绘制函数)之外预先计算对象的位置,然后不执行任何操作,将实际渲染放入绘制函数中,可能会在这里显示出明显的差异。
最后,关于抗锯齿,您链接到的文档指出:“如果系统的 OpenGL 驱动程序支持所需的扩展,QGLWidget 也将使用抗锯齿”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)