QtOpengl的演变[关闭]
Posted
技术标签:
【中文标题】QtOpengl的演变[关闭]【英文标题】:Evolution of QtOpengl [closed] 【发布时间】:2014-04-12 14:59:30 【问题描述】:据我了解,在早期的 Qt 版本中没有模块,只有具有不同功能的单独类,包括图形。在 qt 1.2 中实现了对 Opengl 的支持。但是,QPainter、QImage 存在于早期版本中。 那么,说这些类是原生的(换句话说,是原始的类)是否正确? opengl 类 - 非本地(毕竟它是一个独立的分支)? 我想了解 Qtopengl 的进一步发展,作为创建 2D 图形 ih Qt 的非本机和替代方法,该模块对本机方法(用于创建 2D 图形)的发展的影响。
【问题讨论】:
您的另一个问题刚刚结束,因为您没有解释本地人的意思,但现在我可能明白了。你的意思是软件光栅化而不是硬件加速?或许,您应该使用这个术语,而不是令人困惑的“原生”。 【参考方案1】:那么,说这些类是原生的对吗?
不,不是。
原因是“本地”对不同的人意味着不同的东西。这是解释的问题。看看你的另一个问题我们有多困惑。
到目前为止,我认为您的意思是原生的“非 opengl”2/3D。这可能意味着软件光栅化,而不是直接通过显示驱动程序。所以,仍然在 Qt 级别,但没有 Qt 中的 opengl 类。
现在,我们可以回到 QImage 和 QPainter。是的,QPainter 基本上是软件光栅化的第一代软件,当时 GPU 还没有像现在这样普遍和便宜。
他们基本上是纯粹使用软件技术进行渲染。也就是说,它更受限制,但它可以在没有更昂贵和不太常见的硬件的情况下工作。
(那是 Quake 和其他软件产品的时代,从今天的角度来看是有趣的时代......)
【讨论】:
谢谢。我认为 qt 的 opengl 就像任何语言的外来词(想象一种语言是 Qt 的图形组成部分)。它们可以溶解在原生单词(QImage、QPainter)中,并随着时间的推移成为它们的替代品(或类似的东西)。【参考方案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 绘图更快。
【讨论】:
以上是关于QtOpengl的演变[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
与 QtOpenGl 之类的抽象相比,使用 OpenGl 的绘图要求应该有多低?