据我所知,早期的Qt版本中没有模块,有不同的类具有不同的功能,包括图形。在qt 1.2中实现了Opengl支持。但是,QPainter,QImage存在于早期版本中。 那么,说这些类是原生的(换句话说,类是原始的)是否正确; opengl类 - 非本机(毕竟它是一个separste分支)? 我想学习Qtopengl的进一步演变,作为创建2D图形的非原生和替代方式,Qt,这个模块对原生方法(用于创建2D图形)的演变的影响。
答案 0 :(得分:2)
那么,说这些类是原生的是否正确?
不,不是。
原因是“原生”对不同的人意味着不同的东西。这是解释的问题。看到你的另一个问题我们有多困惑。
到现在为止,我认为你的意思是“非opengl”2 / 3D by native。这可能意味着软件光栅化,而不是直接通过显示驱动程序。所以,仍然在Qt级别,但没有Qt中的opengl类。
现在,我们可以回到QImage和QPainter了。是的,QPainter基本上是软件光栅化的最初一代,从那时起GPU并不那么普遍和便宜。
他们基本上只使用软件技术进行渲染。也就是说,它更受限制,但它的工作没有更昂贵和不太常见的硬件。
(那些是Quake和其他软件产品的时代,从今天的角度来看它的乐趣......)
答案 1 :(得分:2)
如果“本机”是指“硬件辅助”,那么这条线就不再那么清晰了。
请注意QPainter
可以使用各种绘制引擎来进行绘制,因此仅使用QPainter
并不意味着什么。
如果通过“硬件辅助”仅仅意味着使用比CPU的传统整数或浮点执行单元更多的东西,那么是的,光栅绘制引擎确实在可用的情况下使用各种SIMD /向量操作。光栅绘制引擎是用于在QImage
,QPixmap
和非GL QWidget
上绘制的引擎。
如果“硬件辅助”是指“由显卡硬件渲染”,那么您需要使用OpenGL绘图引擎。在QGLWidget
或QQuickPaintedItem
上绘画时使用它。当然,绘画仍然由软件定义 - 几何设置和着色器只是代码!该软件在硬件上运行,可以比通用CPU更快地执行它。
鉴于固定功能OpenGL管道现在或多或少是一个历史工件,所以说明Qt中的所有渲染都是使用纯软件技术完成的并不是错误的,但是软件可以在通用CPU上运行,也可以在通用CPU上利用SIMD /向量执行单元,也可以在GPU上运行。
还应该说,现在典型的Windows驱动程序不加速GDI / gdiplus绘图而不是blits。因此,当使用光栅引擎进行2D绘图时,尤其是在XP等旧版Windows上,Qt可能比平台原生2D绘图更快。