场景图适应¶
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 适配。