场景图适配#

Qt Quick 中的场景图适配#

在 Qt 5.0 中,Qt Quick 总是依赖于 OpenGL(OpenGL ES 2.0 或 OpenGL 2.0)来解析场景图并将结果渲染到渲染目标。

从 Qt 5.8 开始,Qt Quick 还支持软件渲染和 OpenVG。这通过额外的场景图适配实现,可以是插件(openvg)或内置于 Qt Quick 库(软件)中。默认适配继续直接依赖于 OpenGL。

从 Qt 5.14 开始,默认适配增加了通过图形抽象层(Qt GUI 模块提供的 Qt 渲染硬件接口 RHI)进行渲染的选项。启用时,不进行直接的 OpenGL 调用。而是通过抽象层提供的 API 进行场景图渲染,然后将其转换为 OpenGL、Vulkan、Metal 或 Direct3D 调用。着色器处理也通过一次编写着色器代码,编译至 SPIR-V,然后转换为适合各种图形 API 的语言实现统一。

从 Qt 6.0 开始,基于 RHI 的渲染模型是默认的,没有选项可以回退到直接使用 OpenGL。

在您的应用程序之间切换适配#

software 不同,基于 RHI 的渲染器不是一个额外的适配,而是始终内置的。截至 Qt 6.0,它始终启用。在提供多个图形 API 的平台上,场景图进行特定于平台的选择。如果不希望这样,应用程序可以通过设置环境变量 QSG_RHI_BACKEND 或结合使用 GraphicsApisetGraphicsApi() 在应用程序主函数中早些时候强制指定图形 API。

可以通过两种方式切换到不同的适配

  • 使用环境变量 - 在启动应用程序之前设置 QT_QUICK_BACKEND 或旧版的 QMLSCENE_DEVICE 环境变量。

  • 使用 C++ API - 在应用程序的主()函数中适当地调用 setSceneGraphBackend()

以下列表支持后端

  • 默认 - 使用字符串 "rhi" 或不同于以下所列的任何 GraphicsApi 枚举值请求。

  • 软件 - 使用字符串 "software"Software 枚举值请求。

  • OpenVG - 使用字符串 "openvg"OpenVG 枚举值请求。

要了解正在使用哪个后端,您可以通过设置环境变量QSG_INFO或日志类别qt.scenegraph.general来启用基本的场景图信息记录。这将在应用程序启动期间将一些信息打印到调试输出中。

注意

在既没有启用OpenGL也没有启用Vulkan的Qt构建中,默认的适配模式是软件。但是,这并不适用于Windows或macOS,因为这些平台分别始终启用了Direct 3D或Metal支持。

注意

通常,除默认适配模式以外的适配模式都存在一些限制,因为它们不太可能提供与OpenGL完全兼容的功能集。然而,这些适配模式可能在某些特定领域提供自己独有的优势。更多关于各种适配模式的信息,请参阅下文的相关章节。

默认适配#

直接使用OpenGL时,默认的适配模式能够提供完整的Qt Quick 2功能集。更多详情,请参阅默认适配

软件适配#

软件适配是一个Qt Quick 2的备用渲染器,它使用光栅化绘图引擎来渲染场景图的内容。更多详情,请参阅软件适配

OpenVG#

OpenVG适配是一个Qt Quick 2的备用渲染器,它使用OpenVG命令来渲染场景图的内容,提供硬件加速的2D矢量光栅图形。更多详情,请参阅OpenVG适配