QtOpengl的演变

时间:2014-04-12 14:59:30

标签: c++ qt 2d qtgui qtopengl

据我所知,早期的Qt版本中没有模块,有不同的类具有不同的功能,包括图形。在qt 1.2中实现了Opengl支持。但是,QPainter,QImage存在于早期版本中。 那么,说这些类是原生的(换句话说,类是原始的)是否正确; opengl类 - 非本机(毕竟它是一个separste分支)? 我想学习Qtopengl的进一步演变,作为创建2D图形的非原生和替代方式,Qt,这个模块对原生方法(用于创建2D图形)的演变的影响。

2 个答案:

答案 0 :(得分:2)

  

那么,说这些类是原生的是否正确?

不,不是。

原因是“原生”对不同的人意味着不同的东西。这是解释的问题。看到你的另一个问题我们有多困惑。

到现在为止,我认为你的意思是“非opengl”2 / 3D by native。这可能意味着软件光栅化,而不是直接通过显示驱动程序。所以,仍然在Qt级别,但没有Qt中的opengl类。

现在,我们可以回到QImage和QPainter了。是的,QPainter基本上是软件光栅化的最初一代,从那时起GPU并不那么普遍和便宜。

他们基本上只使用软件技术进行渲染。也就是说,它更受限制,但它的工作没有更昂贵和不太常见的硬件。

(那些是Quake和其他软件产品的时代,从今天的角度来看它的乐趣......)

答案 1 :(得分:2)

如果“本机”是指“硬件辅助”,那么这条线就不再那么清晰了。 请注意QPainter可以使用各种绘制引擎来进行绘制,因此仅使用QPainter并不意味着什么。

如果通过“硬件辅助”仅仅意味着使用比CPU的传统整数或浮点执行单元更多的东西,那么是的,光栅绘制引擎确实在可用的情况下使用各种SIMD /向量操作。光栅绘制引擎是用于在QImageQPixmap和非GL QWidget上绘制的引擎。

如果“硬件辅助”是指“由显卡硬件渲染”,那么您需要使用OpenGL绘图引擎。在QGLWidgetQQuickPaintedItem上绘画时使用它。当然,绘画仍然由软件定义 - 几何设置和着色器只是代码!该软件在硬件上运行,可以比通用CPU更快地执行它。

鉴于固定功能OpenGL管道现在或多或少是一个历史工件,所以说明Qt中的所有渲染都是使用纯软件技术完成的并不是错误的,但是软件可以在通用CPU上运行,也可以在通用CPU上利用SIMD /向量执行单元,也可以在GPU上运行。

还应该说,现在典型的Windows驱动程序加速GDI / gdiplus绘图而不是blits。因此,当使用光栅引擎进行2D绘图时,尤其是在XP等旧版Windows上,Qt可能比平台原生2D绘图更快。