场景图适应

Qt Quick中的场景图适配

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

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

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

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

在您的应用程序中切换适应

software不同,基于RHI的渲染器不是额外的适配,而是始终内置的。从Qt 6.0开始,它始终启用。在支持多种图形API的平台上,场景图会做出特定平台的选择。如果不希望这样,应用程序可以通过设置环境变量QSG_RHI_BACKEND或通过setGraphicsApi()结合GraphicsApi来强制指定图形API。

切换到不同的适应可以通过两种方式实现:

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

  • 使用C++ API - 在应用程序的main()函数中尽早调用setSceneGraphBackend()

支持以下后端:

  • 默认 - 使用"rhi"字符串或与下面列出的不同的GraphicsApi枚举值进行请求。

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

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

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

注意

在禁用OpenGL和Vulkan的Qt构建中,默认的适配是software。然而,这不适用于Windows或macOS,因为这些平台始终分别启用了Direct 3D或Metal支持。

注意

通常,除了默认的适配之外,其他适配都带有一系列限制,因为它们不太可能提供与OpenGL 100%兼容的功能集。然而,这些适配在某些领域可能提供其特定的优势。有关各种适配的更多信息,请参阅以下部分。

默认适应

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

软件适配

软件适配是Qt Quick 2的另一种渲染器,它使用光栅绘制引擎来渲染场景图的内容。有关更多详细信息,请参阅软件适配

OpenVG

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