场景图适配

场景图适配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 Rendering Hardware Interface,RHI)进行渲染。 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 或与QSGRendererInterface::GraphicsApi 结合使用QQuickWindow::setGraphicsApi() 来强制指定图形 API。

切换到不同的适配有两种方法:

  • 使用环境变量 - 在启动应用程序前设置QT_QUICK_BACKEND 或传统的QMLSCENE_DEVICE 环境变量。
  • 使用 C++ API - 在应用程序的 main() 函数中尽早调用QQuickWindow::setSceneGraphBackend() 。

支持以下后端

要了解正在使用哪个后端,可以通过QSG_INFO 环境变量或qt.scenegraph.general 日志类别启用基本场景图信息日志。这样,在应用程序启动时,一些信息就会被打印到调试输出中。

注意: 在同时禁用 OpenGL 和 Vulkan 的 Qt 版本中,默认适配为software 。但这不适用于 Windows 或 macOS,因为这些平台始终分别启用了 Direct 3D 或 Metal 支持。

注: 通常情况下,除默认适配外,其他适配都有一系列限制,因为它们不可能提供与 OpenGL 100% 兼容的功能集。不过,这些适配可能会在某些方面提供自己的特定优势。有关各种适配的更多信息,请参阅以下章节。

默认适配

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

软件适配

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

OpenVG

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.