场景图适配
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 渲染硬件接口 RHI,由 Qt GUI 模块提供)进行渲染的选项。当启用时,不会直接进行 OpenGL 调用。而是通过抽象层提供的 API 来渲染场景图,然后将其转换为 OpenGL、Vulkan、Metal 或 Direct 3D 调用。着色器处理也通过编写一次着色器代码,编译为 SPIR-V,然后转换为适用于各种图形 API 的正确语言来统一。
从 Qt 6.0 开始,基于 RHI 的渲染模型是默认的,并且没有回退到直接使用 OpenGL 的选项。
在您的应用程序中切换适配
与软件不同,基于 RHI 的渲染器不是额外的适配,而是始终内建的。截至 Qt 6.0,它始终启用。在提供多个图形 API 的平台上,场景图会根据平台特定选择。如果不希望如此,应用程序可以通过设置环境变量 QSG_RHI_BACKEND
或通过结合使用 QQuickWindow::setGraphicsApi() 和 QSGRendererInterface::GraphicsApi 在应用程序的 main() 函数早期强制指定一个图形 API。
使用两种方式之一切换到不同的适配
- 使用环境变量 - 在启动应用程序之前设置
QT_QUICK_BACKEND
或传统的QMLSCENE_DEVICE
环境变量。 - 使用 C++ API - 在应用程序的 main() 函数早期调用 QQuickWindow::setSceneGraphBackend()。
以下后端受到支持
- 默认 - 使用包含
"rhi"
字符串或列在下文中的不同 QSGRendererInterface::GraphicsApi 枚举值之一来请求。 - 软件 - 使用包含
"software"
字符串或 QSGRendererInterface::Software 枚举值来请求。 - OpenVG - 使用包含
"openvg"
字符串或 QSGRendererInterface::OpenVG 枚举值来请求。
要了解正在使用哪个后端,您可以通过设置环境变量 QSG_INFO
或 qt.scenegraph.general
记录类别来启用基本的场景图信息记录。这会在应用程序启动时将一些信息打印到调试输出。
注意:在同时禁用OpenGL和Vulkan的Qt构建中,默认的适配方式是软件
适配。但是,对于Windows或macOS不适用,因为这些平台分别总是启用Direct 3D或Metal支持。
注意:除了默认适配之外的其他适配通常具有一些限制,因为它们不太可能提供与OpenGL 100%兼容的功能集。然而,这些适配可能会在特定领域提供自己的特定优势。有关各种适配的更多信息,请参阅下面的章节。
默认适配
直接使用OpenGL时,默认适配能够提供完整的Qt Quick 2功能集。更多信息,请参阅默认适配。
软件适配
软件适配是Qt Quick 2的一个可选渲染器,它使用光栅化引擎来渲染场景图的内容。更多信息,请参阅软件适配。
OpenVG
OpenVG适配是Qt Quick 2的一个可选渲染器,它使用OpenVG命令来渲染场景图的内容,以提供硬件加速的2D矢量光栅图形。更多信息,请参阅OpenVG适配。
© 2024 Qt公司有限公司。本文档中的文档贡献享有各自版权拥有者的版权。本文档提供的文档是根据自由软件基金会发布的GNU自由文档许可1.3版本的条款许可的。Qt及其相关标志是芬兰的Qt公司及其在世界其他国家的商标。所有其他商标均属于各自所有者。