QSGRendererInterface Class

提供访问场景图的某些图形 API 特定内部功能的接口。更多

头文件: #include <QSGRendererInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick

公共类型

enum GraphicsApi { Unknown, Software, OpenVG, OpenGL, Direct3D11, …, Null }
enum RenderMode { RenderMode2D, RenderMode2DNoDepthBuffer, RenderMode3D }
enum Resource { DeviceResource, CommandQueueResource, CommandListResource, PainterResource, RhiResource, …, GraphicsQueueIndexResource }
enum ShaderCompilationType { RuntimeCompilation, OfflineCompilation }
flags ShaderCompilationTypes
enum ShaderSourceType { ShaderSourceString, ShaderSourceFile, ShaderByteCode }
flags ShaderSourceTypes
enum ShaderType { UnknownShadingLanguage, GLSL, HLSL, RhiShader }

公共函数

virtual void *getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const
virtual void *getResource(QQuickWindow *window, const char *resource) const
virtual QSGRendererInterface::GraphicsApi graphicsApi() const = 0
virtual QSGRendererInterface::ShaderCompilationTypes shaderCompilationType() const = 0
virtual QSGRendererInterface::ShaderSourceTypes shaderSourceType() const = 0
virtual QSGRendererInterface::ShaderType shaderType() const = 0

静态公共成员

bool isApiRhiBased(QSGRendererInterface::GraphicsApi api)

详细说明

渲染器接口允许访问场景图中图形 API 的特定功能。此类内部结构通常不会公开。但是,在通过QSGRenderNode 等方式集成自定义渲染时,可能需要查询某些值,例如场景图使用的图形设备(如 Direct3D 或 Vulkan 设备)。

QSGRendererInterface 的功能具有不同的可用性。API 和语言查询,如graphicsApi() 或shaderType() 总是可用的,这意味着只需构建一个QQuickWindowQQuickView ,就可以通过QQuickWindow::rendererInterface() 直接查询正在使用的图形 API 或着色语言。这就保证了GraphicsInfo QML 类型等实用程序能够尽早报告正确的值,而不会出现条件属性值(例如取决于shaderType() )评估为意外值的情况。

然而,特定于引擎的访问器(如getResource() )只有在场景图初始化后才可用。此外,在调用这些函数时,可能会受到后端特定的限制。唯一能保证成功的方法是在渲染节点(即为下一帧准备命令列表)时调用它们。在实践中,这通常意味着QSGRenderNode::render().

成员类型文档

enum QSGRendererInterface::GraphicsApi

常数说明
QSGRendererInterface::Unknown0正在使用未知图形 API
QSGRendererInterface::Software1正在使用Qt Quick 2D 渲染器
QSGRendererInterface::OpenVG2通过 EGL 使用 OpenVG
QSGRendererInterface::OpenGL (since Qt 5.14)3通过图形抽象层使用 OpenGL ES 2.0 或更高版本。
QSGRendererInterface::Direct3D11 (since Qt 5.14)4通过图形抽象层使用 Direct3D 11。
QSGRendererInterface::Direct3D12 (since Qt 6.6)8通过图形抽象层使用 Direct3D 12。
QSGRendererInterface::Vulkan (since Qt 5.14)5通过图形抽象层使用 Vulkan 1.0。
QSGRendererInterface::Metal (since Qt 5.14)6通过图形抽象层的 Metal
QSGRendererInterface::Null (since Qt 5.14)7通过图形抽象层的 Null(无输出)。

enum QSGRendererInterface::RenderMode

常数描述
QSGRendererInterface::RenderMode2D0正常 2D 渲染
QSGRendererInterface::RenderMode2DNoDepthBuffer1禁用深度缓冲区的正常 2D 渲染
QSGRendererInterface::RenderMode3D2场景作为 3D 图形的一部分进行渲染

enum QSGRendererInterface::Resource

常数说明
QSGRendererInterface::DeviceResource0资源是指向图形设备的指针(如适用)。例如,VkDevice *MTLDevice *ID3D11Device * 。请注意,对于 Vulkan,返回值是指向 VkDevice 的指针,而不是句柄本身。这是因为 Vulkan 句柄可能不是指针,而且使用的大小可能与架构的指针大小不同,因此仅仅将void * 转换成/转换成 Vulkan 句柄是错误的。
QSGRendererInterface::CommandQueueResource1资源是指向场景图使用的图形命令队列的指针(如适用)。例如,VkQueue *MTLCommandQueue * 。请注意,对于 Vulkan,返回值是指向 VkQueue 的指针,而不是句柄本身。
QSGRendererInterface::CommandListResource2资源是指向场景图使用的命令列表或缓冲区的指针(如适用)。例如,VkCommandBuffer *MTLCommandBuffer * 。该对象的有效期有限,仅在场景图准备下一帧时有效。请注意,对于 Vulkan,返回值是指向 VkCommandBuffer 的指针,而不是句柄本身。
QSGRendererInterface::PainterResource3当使用软件后端运行时,该资源是指向场景图使用的活动QPainter 的指针。
QSGRendererInterface::RhiResource (since Qt 5.14)4该资源是指向场景图使用的QRhi 实例的指针(如适用)。
QSGRendererInterface::RhiSwapchainResource (since Qt 6.0)5该资源是指向与窗口相关联的 QRhiSwapchain 实例的指针。当窗口与QQuickRenderControl 结合使用时,该值为空。
QSGRendererInterface::RhiRedirectCommandBuffer (since Qt 6.0)6该资源是指向QRhiCommandBuffer 实例的指针,该实例与窗口及其QQuickRenderControl 关联。当窗口未与QQuickRenderControl 关联时,该值为空。
QSGRendererInterface::RhiRedirectRenderTarget (since Qt 6.0)7该资源是指向与窗口及其QQuickRenderControl 相关联的QRhiTextureRenderTarget 实例的指针。当窗口未与QQuickRenderControl 关联时,该值为空。请注意,该值始终反映主纹理渲染目标,且不依赖于Qt Quick 场景,这意味着它不会考虑ShaderEffectQQuickItem 图层生成的任何附加纹理目标渲染传递。
QSGRendererInterface::PhysicalDeviceResource (since Qt 5.14)8资源是指向场景图使用的物理设备对象的指针(如适用)。VkPhysicalDevice *请注意,对于 Vulkan,返回值是指向 VkPhysicalDevice 的指针,而不是句柄本身。
QSGRendererInterface::OpenGLContextResource (since Qt 5.14)9资源是指向场景图(在渲染线程上)使用的QOpenGLContext 的指针(如适用)。
QSGRendererInterface::DeviceContextResource (since Qt 5.14)10该资源是指向场景图使用的设备上下文的指针(如适用)。例如,ID3D11DeviceContext *
QSGRendererInterface::CommandEncoderResource (since Qt 5.14)11该资源是指向场景图使用的当前活动渲染命令编码器对象的指针(如适用)。例如,MTLRenderCommandEncoder * 。该对象的有效期有限,仅在场景图记录下一帧的渲染时有效。
QSGRendererInterface::VulkanInstanceResource (since Qt 5.14)12资源是指向场景图使用的QVulkanInstance 的指针(如适用)。
QSGRendererInterface::RenderPassResource (since Qt 5.14)13该资源是指向场景图使用的主渲染传递的指针,描述了颜色和深度/眩晕附件及其使用方式。例如,VkRenderPass * 。请注意,该值始终反映的是主渲染目标(屏幕窗口或纹理QQuickRenderControl 重定向到的纹理),它不依赖于Qt Quick 场景,也就是说,它不考虑ShaderEffectQQuickItem 图层生成的任何附加纹理目标渲染传递。
QSGRendererInterface::RedirectPaintDevice (since Qt 6.4)14资源是指向QPaintDevice 实例的指针,该实例与窗口及其QQuickRenderControl 相关联。当窗口未与QQuickRenderControl 关联时,该值为空。
QSGRendererInterface::GraphicsQueueFamilyIndexResource (since Qt 6.6)15资源是指向场景图使用的图形队列族索引的指针(如适用)。对于 Vulkan,这是指向uint32_t 索引值的指针。
QSGRendererInterface::GraphicsQueueIndexResource (since Qt 6.6)16该资源是指向场景图使用的图形队列索引(uint32_t)的指针(如适用)。在使用 Vulkan 时,这是一个指向uint32_t 索引值的指针,实际上就是为CommandQueueResource 报告的 VkQueue 的索引。

枚举 QSGRendererInterface::ShaderCompilationType
标志 QSGRendererInterface::ShaderCompilationTypes

常量描述
QSGRendererInterface::RuntimeCompilation0x01支持着色器源代码的运行时编译
QSGRendererInterface::OfflineCompilation0x02支持预编译字节码

ShaderCompilationTypes 类型是QFlags<ShaderCompilationType> 的类型定义。它存储 ShaderCompilationType 值的 OR 组合。

枚举 QSGRendererInterface::ShaderSourceType
flags QSGRendererInterface::ShaderSourceTypes

常量描述
QSGRendererInterface::ShaderSourceString0x01着色器源可以在包含着色器源的本地或资源文件的相应属性中以字符串形式提供。ShaderEffect
QSGRendererInterface::ShaderSourceFile0x02支持包含着色器源代码的本地文件或资源文件
QSGRendererInterface::ShaderByteCode0x04支持包含着色器字节码的本地文件或资源文件

ShaderSourceTypes 类型是QFlags<ShaderSourceType> 的类型定义。它存储 ShaderSourceType 值的 OR 组合。

enum QSGRendererInterface::ShaderType

常数说明
QSGRendererInterface::UnknownShadingLanguage0由于未关联窗口和场景图,因此尚不清楚
QSGRendererInterface::GLSL1GLSL 或 GLSL ES
QSGRendererInterface::HLSL2HLSL
QSGRendererInterface::RhiShader (since Qt 5.14)3消耗QShader 实例,该实例包含多种目标语言和中间格式的着色器变体。

成员函数文档

[virtual] void *QSGRendererInterface::getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const

查询window 中的图形resource 。如果相关资源不支持或不可用,则返回空值。

查询成功后,返回的指针要么是指向接口的直接指针,要么是指向需要先取消引用的不透明句柄的指针(例如VkDevice dev = *static_cast<VkDevice *>(result) )。后者是必要的,因为此类句柄的大小可能与指针不同。

注意: 返回指针的所有权不会转移给调用者。

注意: 此函数只能在呈现线程上调用。

[virtual] void *QSGRendererInterface::getResource(QQuickWindow *window, const char *resource) const

查询图形资源。resource 是特定于后台的密钥。这样就可以支持资源枚举中未列出的任何未来资源。

注意: 返回指针的所有权不会转移给调用者。

注意: 此函数只能在呈现线程上调用。

[pure virtual] QSGRendererInterface::GraphicsApi QSGRendererInterface::graphicsApi() const

返回Qt Quick 场景图正在使用的图形 API。

注意: 此函数可在任何线程上调用。

[static] bool QSGRendererInterface::isApiRhiBased(QSGRendererInterface::GraphicsApi api)

如果api 基于图形抽象层 (QRhi) 而不是直接调用本地图形 API,则返回 true。

注意: 此函数可在任何线程上调用。

[pure virtual] QSGRendererInterface::ShaderCompilationTypes QSGRendererInterface::shaderCompilationType() const

返回应用程序正在使用的Qt Quick 后端所支持的着色器编译方法的位掩码。

注意: 此函数可在任何线程上调用。

另请参见 QtQuick::GraphicsInfo

[pure virtual] QSGRendererInterface::ShaderSourceTypes QSGRendererInterface::shaderSourceType() const

返回在ShaderEffect 项目中提供着色器源的受支持方式的位掩码。

注意: 此函数可在任何线程上调用。

另请参见 QtQuick::GraphicsInfo

[pure virtual] QSGRendererInterface::ShaderType QSGRendererInterface::shaderType() const

返回应用程序正在使用的Qt Quick 后端所支持的着色语言。

注: 此函数可在任何线程上调用。

另请参阅 QtQuick::GraphicsInfo

© 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.