场景图适配#
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
或结合使用 GraphicsApi
和 setGraphicsApi()
在应用程序主函数中早些时候强制指定图形 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适配 。