- class QSGRendererInterface#
提供一个接口,用于访问场景图中一些图形API特定内部细节。更多…
概述#
虚拟方法#
def
getResource()
def
graphicsApi()
def
shaderType()
静态函数#
def
isApiRhiBased()
注意
本文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建问题报告来让我们知道。
详细说明#
渲染器接口允许访问场景图中的一些图形API特定功能。这些内部通常不会被提供。然而,当通过
QSGRenderNode
等示例集成自定义渲染时,查询某些值可能变得必要,例如场景图使用的图形设备(例如Direct3D或Vulkan设备)。QSGRendererInterface
的函数具有不同的可用性。API 和语言查询,如graphicsApi()
或shaderType()
总是可用,这意味着只需构建一个QQuickWindow
或QQuickView
即可,并且可以通过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 场景,这意味着它不考虑由 ShaderEffect 或QQuickItem
层生成的任何额外的纹理定位渲染通道。QSGRendererInterface.PhysicalDeviceResource
该资源是指向场景图使用的物理设备对象的指针,在适用时。例如,一个
VkPhysicalDevice
*。注意,在使用Vulkan时,返回值是指向VkPhysicalDevice的指针,而不是句柄本身。QSGRendererInterface.OpenGLContextResource
该资源是指向场景图(在渲染线程上)使用的QOpenGLContext的指针,在适用时。
QSGRendererInterface.DeviceContextResource
该资源是指向场景图使用的设备上下文的指针,在适用时。例如,一个
ID3D11DeviceContext *
。QSGRendererInterface.CommandEncoderResource
该资源是指向场景图使用的当前活动渲染命令编码器对象的指针,在适用时。例如,一个
MTLRenderCommandEncoder *
。此对象的有效性有限,仅在场景图正在记录用于下一帧的渲染通道时有效。QSGRendererInterface.VulkanInstanceResource
该资源是指向场景图使用的QVulkanInstance的指针,在适用时。
QSGRendererInterface.RenderPassResource
该资源是指向场景图使用的主体渲染通道的指针,描述颜色和深度/辅助附件以及它们的用途。例如,一个
VkRenderPass
*。请注意,该值始终反映主要渲染目标(无论是屏幕窗体还是QQuickRenderControl
重新定向到的纹理),并且它不依赖于Qt Quick场景,这意味着它不考虑由 ShaderEffect 或QQuickItem
层产生的任何额外的纹理定位渲染通道。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)#
- 参数:
window –
QQuickWindow
resource –
Resource
- 返回类型:
void
查询
window
中的图形resource
。当所述资源不受支持或不可用时返回 null。成功时,返回的指针要么是直接指向接口的指针,要么是指向需要先解引用的不可知类型的指针(例如,
VkDevice dev = *static_cast<VkDevice *>(result)
)。后者是必要的,因为这样的句柄的大小可能与指针不同。注意
返回指针的所有权从不转移到调用者。
注意
这个函数必须在渲染线程上调用。
- getResource(window, resource)
- 参数:
window –
QQuickWindow
resource – str
- 返回类型:
void
查询图形资源。
resource
是后端特定的键。这允许支持不在 Resource 枚举中列出的任何未来资源。注意
返回指针的所有权从不转移到调用者。
注意
这个函数必须在渲染线程上调用。
- abstract graphicsApi()#
- 返回类型:
返回 Qt Quick 场景图中正在使用的图形 API。
注意
这个函数可以在任何线程上调用。
- static isApiRhiBased(api)#
- 参数:
api –
GraphicsApi
- 返回类型:
bool
如果
api
基于图形抽象层(QRhi)而不是直接调用原生图形 API,则返回 true。注意
这个函数可以在任何线程上调用。
- 抽象 shaderCompilationType()#
- 返回类型:
返回应用程序使用的 Qt Quick 后端支持的着色器编译方法的位掩码。
- 抽象 shaderSourceType()#
- 返回类型:
返回在 ShaderEffect 项目中提供着色器源支持的方式的位掩码。
- 抽象 shaderType()#
- 返回类型:
返回应用程序使用的 Qt Quick 后端支持的着色器语言。