class QSGRendererInterface#

提供一个接口,用于访问场景图中一些图形API特定内部细节。更多

概述#

虚拟方法#

静态函数#

注意

本文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建问题报告来让我们知道。

详细说明#

渲染器接口允许访问场景图中的一些图形API特定功能。这些内部通常不会被提供。然而,当通过QSGRenderNode等示例集成自定义渲染时,查询某些值可能变得必要,例如场景图使用的图形设备(例如Direct3D或Vulkan设备)。

QSGRendererInterface 的函数具有不同的可用性。API 和语言查询,如 graphicsApi()shaderType() 总是可用,这意味着只需构建一个 QQuickWindowQQuickView 即可,并且可以通过 rendererInterface() 在之后立即查询正在使用的图形 API 或着色语言。这保证了诸如 GraphicsInfo QML 类型之类的工具能够在尽可能早的时刻报告正确的值,而无需依赖于条件属性值——例如 shaderType() 的评估可能会产生意外的值。

特定的引擎访问器,如 getResource() ,只有在初始化了场景图之后才可用。此外,可能存在后端特定的限制,限制此类函数的调用时机。唯一能确保成功的方法是当节点渲染活动(即下一帧命令列的准备)正在进行时调用它们。在实践中,这通常意味着 render()

class GraphicsApi#

常量

描述

QSGRendererInterface.Unknown

正在使用未知图形 API

QSGRendererInterface.Software

正在使用 Qt Quick 2D 渲染器

QSGRendererInterface.OpenVG

通过 EGL 使用 OpenVG

QSGRendererInterface.OpenGL

通过图形抽象层使用 OpenGL ES 2.0 或更高版本

QSGRendererInterface.Direct3D11

通过图形抽象层使用 Direct3D 11

QSGRendererInterface.Direct3D12

通过图形抽象层使用 Direct3D 12

QSGRendererInterface.Vulkan

通过图形抽象层使用 Vulkan 1.0

QSGRendererInterface.Metal

通过图形抽象层使用 Metal

QSGRendererInterface.Null

通过图形抽象层使用 Null(无输出)

class Resource#

常量

描述

QSGRendererInterface.DeviceResource

资源是图形设备的指针,当适用时。例如,VkDevice *MTLDevice *ID3D11Device *。请注意,在使用 Vulkan 时,返回值是 VkDevice 的指针,而不是句柄本身。这是因为 Vulkan 句柄可能不是指针,并且可能使用与体系结构指针大小不同的大小,因此仅仅将它们强制转换为 void * 是错误的。

QSGRendererInterface.CommandQueueResource

资源是在适用时由场景图使用的图形命令队列的指针。例如,VkQueue *MTLCommandQueue *。请注意,在使用 Vulkan 时,返回值是 VkQueue 的指针,而不是句柄本身。

QSGRendererInterface.CommandListResource

资源是在适用时由场景图使用的命令列表或缓存的指针。例如,VkCommandBuffer *MTLCommandBuffer *。此对象的有效性有限,仅在场景图准备下一帧时有效。请注意,在使用 Vulkan 时,返回值是 VkCommandBuffer 的指针,而不是句柄本身。

QSGRendererInterface.PainterResource

资源是当使用软件后端运行时,场景图使用的活动 QPainter 的指针。

QSGRendererInterface.RhiResource

资源是在适用时由场景图使用的 QRhi 实例的指针。

QSGRendererInterface.RhiSwapchainResource

资源是与窗口关联的 QRhiSwapchain 实例的指针。当窗口与 QQuickRenderControl 结合使用时,值为 null。

QSGRendererInterface.RhiRedirectCommandBuffer

资源是与窗口及其 QQuickRenderControl 关联的 QRhiCommandBuffer 实例的指针。当窗口未关联到 QQuickRenderControl 时,值为 null。

QSGRendererInterface.RhiRedirectRenderTarget

资源是与窗口及其 QQuickRenderControl 关联的 QRhiTextureRenderTarget 实例的指针。当窗口未关联到 QQuickRenderControl 时,值为 null。注意,该值始终反映主纹理渲染目标,并且它不依赖于 Qt Quick 场景,这意味着它不考虑由 ShaderEffectQQuickItem 层生成的任何额外的纹理定位渲染通道。

QSGRendererInterface.PhysicalDeviceResource

该资源是指向场景图使用的物理设备对象的指针,在适用时。例如,一个 VkPhysicalDevice *。注意,在使用Vulkan时,返回值是指向VkPhysicalDevice的指针,而不是句柄本身。

QSGRendererInterface.OpenGLContextResource

该资源是指向场景图(在渲染线程上)使用的QOpenGLContext的指针,在适用时。

QSGRendererInterface.DeviceContextResource

该资源是指向场景图使用的设备上下文的指针,在适用时。例如,一个 ID3D11DeviceContext *

QSGRendererInterface.CommandEncoderResource

该资源是指向场景图使用的当前活动渲染命令编码器对象的指针,在适用时。例如,一个 MTLRenderCommandEncoder *。此对象的有效性有限,仅在场景图正在记录用于下一帧的渲染通道时有效。

QSGRendererInterface.VulkanInstanceResource

该资源是指向场景图使用的QVulkanInstance的指针,在适用时。

QSGRendererInterface.RenderPassResource

该资源是指向场景图使用的主体渲染通道的指针,描述颜色和深度/辅助附件以及它们的用途。例如,一个 VkRenderPass *。请注意,该值始终反映主要渲染目标(无论是屏幕窗体还是QQuickRenderControl 重新定向到的纹理),并且它不依赖于Qt Quick场景,这意味着它不考虑由 ShaderEffectQQuickItem 层产生的任何额外的纹理定位渲染通道。

QSGRendererInterface.RedirectPaintDevice

该资源是指向与窗口及其 QQuickRenderControl 相关的QPaintDevice实例的指针。当窗口未与 QQuickRenderControl 关联时,该值是null。

QSGRendererInterface.GraphicsQueueFamilyIndexResource

该资源是指向场景图使用的图形队列家族索引的指针,在适用时。在与Vulkan一起使用时,这是指向一个uint32_t索引值的指针。

QSGRendererInterface.GraphicsQueueIndexResource

该资源是指向场景图使用的图形队列索引(uint32_t)的指针,在适用时。在与Vulkan一起使用时,这是指向一个uint32_t索引值的指针,在实践中是报告为 CommandQueueResource 的VkQueue的索引。

class ShaderType#

常量

描述

QSGRendererInterface.UnknownShadingLanguage

由于没有窗口和场景图而尚未知

QSGRendererInterface.GLSL

GLSL或GLSL ES

QSGRendererInterface.HLSL

HLSL

QSGRendererInterface.RhiShader

消耗包含针对多种目标语言和中间格式进行变体设置的QShader实例。

class ShaderCompilationType#

常量

描述

QSGRendererInterface.RuntimeCompilation

(继承自 enum.Flag) 支持对着色器源代码的即时编译。

QSGRendererInterface.OfflineCompilation

支持预编译的字节码

class ShaderSourceType#

常量

描述

QSGRendererInterface.ShaderSourceString

(继承自 enum.Flag) 着色器来源可以以字符串形式提供,对应于 ShaderEffect 的相应属性

QSGRendererInterface.ShaderSourceFile

支持包含着色器源代码的本地或资源文件

QSGRendererInterface.ShaderByteCode

支持包含着色器字节码的本地或资源文件

class RenderMode#

常量

描述

QSGRendererInterface.RenderMode2D

常规 2D 渲染

QSGRendererInterface.RenderMode2DNoDepthBuffer

禁用深度缓冲的常规 2D 渲染

QSGRendererInterface.RenderMode3D

场景作为 3D 图的一部分进行渲染

getResource(window, resource)#
参数:
返回类型:

void

查询 window 中的图形 resource。当所述资源不受支持或不可用时返回 null。

成功时,返回的指针要么是直接指向接口的指针,要么是指向需要先解引用的不可知类型的指针(例如,VkDevice dev = *static_cast<VkDevice *>(result))。后者是必要的,因为这样的句柄的大小可能与指针不同。

注意

返回指针的所有权从不转移到调用者。

注意

这个函数必须在渲染线程上调用。

getResource(window, resource)
参数:
返回类型:

void

查询图形资源。 resource 是后端特定的键。这允许支持不在 Resource 枚举中列出的任何未来资源。

注意

返回指针的所有权从不转移到调用者。

注意

这个函数必须在渲染线程上调用。

abstract graphicsApi()#
返回类型:

GraphicsApi

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

注意

这个函数可以在任何线程上调用。

static isApiRhiBased(api)#
参数:

apiGraphicsApi

返回类型:

bool

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

注意

这个函数可以在任何线程上调用。

抽象 shaderCompilationType()#
返回类型:

组合 ShaderCompilationType

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

注意

这个函数可以在任何线程上调用。

另请参阅

QtQuick::GraphicsInfo

抽象 shaderSourceType()#
返回类型:

组合 ShaderSourceType

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

注意

这个函数可以在任何线程上调用。

另请参阅

QtQuick::GraphicsInfo

抽象 shaderType()#
返回类型:

ShaderType

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

注意

这个函数可以在任何线程上调用。

另请参阅

QtQuick::GraphicsInfo