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/矢量操作。光栅绘制引擎是用于在QImageQPixmap 和非 GL QWidget 上绘制的引擎。

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

鉴于固定功能的 OpenGL 管道近来或多或少已成为历史产物,因此说在 Qt 中所有的渲染都是使用纯软件技术完成的并不是不正确的,但是软件可以在通用 CPU 上运行,或者在通用 CPU 上利用 SIMD/向量执行单元,或者可以在 GPU 上运行。

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

【讨论】:

以上是关于QtOpengl的演变[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

QtOpengl 与 mac 上的 Opengl 框架冲突

与 QtOpenGl 之类的抽象相比,使用 OpenGl 的绘图要求应该有多低?

实例渲染 OpenGL

Qt OpenGL (QOpenGLWidget) - 简单三角形

QtOpenGL 和 MacOS X——软件渲染?

qtopencv和qtopengl的区别