QQuickRenderTarget Class
QQuickRenderTarget 类为指定渲染目标和相关元数据的本地图形资源提供了一个不透明容器。更多
Header: | #include <QQuickRenderTarget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake: | QT += quick |
自 | Qt 6.0 |
公共类型
公共函数
QQuickRenderTarget() | |
~QQuickRenderTarget() | |
(since 6.8) QRhiTexture * | depthTexture() const |
(since 6.3) qreal | devicePixelRatio() const |
bool | isNull() const |
(since 6.4) bool | mirrorVertically() const |
(since 6.8) void | setDepthTexture(QRhiTexture *texture) |
(since 6.3) void | setDevicePixelRatio(qreal ratio) |
(since 6.4) void | setMirrorVertically(bool enable) |
静态公共成员
(since 6.4) QQuickRenderTarget | fromD3D11Texture(void *texture, uint format, const QSize &pixelSize, int sampleCount = 1) |
QQuickRenderTarget | fromD3D11Texture(void *texture, const QSize &pixelSize, int sampleCount = 1) |
(since 6.8) QQuickRenderTarget | fromD3D11Texture(void *texture, uint format, QSize pixelSize, int sampleCount, QQuickRenderTarget::Flags flags) |
(since 6.6) QQuickRenderTarget | fromD3D12Texture(void *texture, int resourceState, uint format, const QSize &pixelSize, int sampleCount = 1) |
(since 6.8) QQuickRenderTarget | fromD3D12Texture(void *texture, int resourceState, uint format, uint viewFormat, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags) |
(since 6.4) QQuickRenderTarget | fromMetalTexture(MTLTexture *texture, uint format, const QSize &pixelSize, int sampleCount = 1) |
QQuickRenderTarget | fromMetalTexture(MTLTexture *texture, const QSize &pixelSize, int sampleCount = 1) |
(since 6.8) QQuickRenderTarget | fromMetalTexture(MTLTexture *texture, uint format, uint viewFormat, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags) |
(since 6.2) QQuickRenderTarget | fromOpenGLRenderBuffer(uint renderbufferId, const QSize &pixelSize, int sampleCount = 1) |
(since 6.4) QQuickRenderTarget | fromOpenGLTexture(uint textureId, uint format, const QSize &pixelSize, int sampleCount = 1) |
QQuickRenderTarget | fromOpenGLTexture(uint textureId, const QSize &pixelSize, int sampleCount = 1) |
(since 6.8) QQuickRenderTarget | fromOpenGLTexture(uint textureId, uint format, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags) |
(since 6.4) QQuickRenderTarget | fromPaintDevice(QPaintDevice *device) |
(since 6.6) QQuickRenderTarget | fromRhiRenderTarget(QRhiRenderTarget *renderTarget) |
(since 6.4) QQuickRenderTarget | fromVulkanImage(VkImage image, VkImageLayout layout, VkFormat format, const QSize &pixelSize, int sampleCount = 1) |
QQuickRenderTarget | fromVulkanImage(VkImage image, VkImageLayout layout, const QSize &pixelSize, int sampleCount = 1) |
(since 6.8) QQuickRenderTarget | fromVulkanImage(VkImage image, VkImageLayout layout, VkFormat format, VkFormat viewFormat, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags) |
相关非成员
bool | operator!=(const QQuickRenderTarget &a, const QQuickRenderTarget &b) |
bool | operator==(const QQuickRenderTarget &a, const QQuickRenderTarget &b) |
另请参阅 QQuickWindow::setRenderTarget() 和QQuickGraphicsDevice 。
成员类型文档
[since 6.8]
枚举类 QQuickRenderTarget::Flag
flags QQuickRenderTarget::Flags
用于静态QQuickRenderTarget 构造函数的标志。
常量 | 值 | 说明 |
---|---|---|
QQuickRenderTarget::Flag::MultisampleResolve | 0x01 | 表示sampleCount 参数不是所提供纹理的采样数目(纹理仍然是非多重采样纹理),而是多重采样抗锯齿所需的采样数目。触发器会自动创建和管理一个中间多采样纹理(或纹理数组)作为颜色缓冲区,对应用程序透明。采样会在渲染结束时自动解析到提供的纹理中。如果未设置此标记,且sampleCount 参数大于 1,则表示所提供的纹理是多采样纹理。如果sampleCount 为 1(表示不涉及多重采样),该标志则不起作用。 |
该枚举在 Qt 6.8 中引入。
Flags 类型是QFlags<Flag> 的类型定义。它存储 Flag 值的 OR 组合。
成员函数文档
QQuickRenderTarget::QQuickRenderTarget()
构建一个不引用任何本地对象的默认 QQuickRenderTarget。
[noexcept]
QQuickRenderTarget::~QQuickRenderTarget()
毁灭者
[since 6.8]
QRhiTexture *QQuickRenderTarget::depthTexture() const
返回当前设置的深度纹理,或者在大多数情况下,返回nullptr
。
只有调用setDepthTexture() 时,该值才不会为空。
此函数在 Qt 6.8 中引入。
另请参阅 setDepthTexture()。
[since 6.3]
qreal QQuickRenderTarget::devicePixelRatio() const
返回呈现目标的设备像素比例。这是设备像素和独立设备像素之间的比率。
默认设备像素比为 1.0。
此函数在 Qt 6.3 中引入。
另请参阅 setDevicePixelRatio()。
[static, since 6.4]
QQuickRenderTarget QQuickRenderTarget::fromD3D11Texture(void *texture, uint format, const QSize &pixelSize, int sampleCount = 1)
返回一个新的QQuickRenderTarget ,引用texture 指定的 D3D11 纹理对象。
format 指定纹理的 DXGI_FORMAT。只能使用 Qt 渲染基础架构支持的纹理格式。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
此函数在 Qt 6.4 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static]
QQuickRenderTarget QQuickRenderTarget::fromD3D11Texture(void *texture, const QSize &pixelSize, int sampleCount = 1)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用texture 指定的 D3D11 纹理对象。假定纹理的格式为 DXGI_FORMAT_R8G8B8A8_UNORM。
pixelSize 指定图像的大小(像素)。目前只支持二维纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.8]
QQuickRenderTarget QQuickRenderTarget::fromD3D11Texture(void *texture, uint format, QSize pixelSize, int sampleCount, QQuickRenderTarget::Flags flags)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用由texture 指定的 D3D11 纹理对象。
format 指定纹理的 DXGI_FORMAT。只能使用 Qt 渲染基础架构支持的纹理格式。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理,除非 包含 。在这种情况下, 被假定为非多重采样 2D 纹理,而 则定义所需的采样数目。生成的 将使用自动创建的中间多采样纹理作为色彩附件,并将采样解析为 。当本地纹理还不是多采样时,建议采用这种方法来执行 MSAA。flags MultisampleResolve texture sampleCount QQuickRenderTarget texture
纹理将作为Qt Quick 场景图使用的渲染目标的第一个色彩附件。深度模版缓冲区(如适用)会自动创建和使用。当颜色缓冲区为多采样时,深度模版缓冲区也会自动为多采样。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和采样计数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
此函数在 Qt 6.8 中引入。
另请参阅 QQuickWindow::setRenderTarget(),QQuickRenderControl, 和fromD3D11Texture().
[static, since 6.6]
QQuickRenderTarget QQuickRenderTarget::fromD3D12Texture(void *texture, int resourceState, uint format, const QSize &pixelSize, int sampleCount = 1)
返回一个新的QQuickRenderTarget ,引用texture 指定的 D3D12 纹理对象。
resourceState 必须是一个有效的位掩码,包含来自 D3D12_RESOURCE_STATES 的位,指定资源的当前状态。
format 指定纹理的 DXGI_FORMAT。只能使用 Qt 渲染基础架构支持的纹理格式。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
此函数在 Qt 6.6 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.8]
QQuickRenderTarget QQuickRenderTarget::fromD3D12Texture(void *texture, int resourceState, uint format, uint viewFormat, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用texture 指定的 D3D12 2D 纹理或 2D 纹理数组对象。
resourceState 必须是一个有效的位掩码,包含来自 D3D12_RESOURCE_STATES 的位,指定资源的当前状态。
format 指定纹理的 DXGI_FORMAT。只能使用 Qt 渲染基础架构支持的纹理格式。
viewFormat 是用于渲染目标视图(RTV)的 DXGI_FORMAT。通常与 相同。仅当驱动程序支持format宽松格式转换时才起作用,否则该参数将被忽略。在实践中,Windows 10 1703 及更新版本预计将始终支持该功能。
pixelSize 指定图像的大小(像素)。目前仅支持二维纹理和二维纹理数组。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而 4 或 8 这样的值则表示本地对象是多重采样纹理,除非 包含 。在这种情况下, 被假定为非多重采样的二维纹理或二维纹理数组,而 则定义所需的采样数目。生成的 将使用自动创建的中间多采样纹理(或纹理数组)作为色彩附件,并将采样解析为 。当本地 D3D12 纹理还不是多采样时,建议采用这种方法来执行 MSAA。flags MultisampleResolve texture sampleCount QQuickRenderTarget texture
数组元素(层)的数量在arraySize 中给出。arraySize 是视图的数量,通常为2
。有关在Qt Quick 场景图中启用多视图渲染的详情,请参阅QSGMaterial::viewCount() 。
纹理被用作Qt Quick 场景图所使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)会自动创建和使用。当颜色缓冲区为多采样时,深度模版缓冲区也会自动为多采样。对于多视图渲染,深度钢网纹理将自动成为一个数组,并与arraySize 匹配。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和采样计数的引用及相关元数据。调用者有责任确保原生资源在必要时一直存在。
此函数在 Qt 6.8 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.4]
QQuickRenderTarget QQuickRenderTarget::fromMetalTexture(MTLTexture *texture, uint format, const QSize &pixelSize, int sampleCount = 1)
返回一个新的QQuickRenderTarget ,引用texture 指定的金属纹理对象。
format 指定纹理的 MTLPixelFormat。只能使用 Qt 渲染基础架构支持的纹理格式。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
此函数在 Qt 6.4 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static]
QQuickRenderTarget QQuickRenderTarget::fromMetalTexture(MTLTexture *texture, const QSize &pixelSize, int sampleCount = 1)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用texture 指定的金属纹理对象。假定纹理格式为 MTLPixelFormatRGBA8Unorm。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.8]
QQuickRenderTarget QQuickRenderTarget::fromMetalTexture(MTLTexture *texture, uint format, uint viewFormat, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用texture 中给出的金属二维纹理或二维纹理数组。
format 指定纹理的 MTLPixelFormat。只能使用 Qt 渲染基础架构支持的纹理格式。
viewFormat 通常设置为与 相同的值。在某些情况下,例如在渲染 格式的纹理时,如果不希望在着色器写入时进行线性->sRGB 的隐式转换,该值可以不同。但请注意,当运行时 报告不支持 功能时,Qt 可能会忽略该值。format _SRGB
QRhi QRhi::TextureViewFormat
pixelSize 指定图像的大小(像素)。目前只支持二维纹理和二维纹理数组。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而 4 或 8 这样的值则表示本地对象是多重采样纹理,除非 包含 。在这种情况下, 被假定为非多重采样的二维纹理或二维纹理数组,而 则定义所需的采样数目。生成的 将使用自动创建的中间多采样纹理(或纹理数组)作为色彩附件,并将采样解析为 。当原始金属纹理还不是多采样时,建议采用这种方法来执行 MSAA。flags MultisampleResolve texture sampleCount QQuickRenderTarget texture
数组元素(层)的数量在arraySize 中给出。arraySize 是视图数,通常为2
。有关在Qt Quick 场景图中启用多视图渲染的详情,请参阅QSGMaterial::viewCount() 。
纹理被用作Qt Quick 场景图所使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)会自动创建和使用。当颜色缓冲区为多采样时,深度模版缓冲区也会自动为多采样。对于多视图渲染,深度钢网纹理将自动成为一个数组,并与arraySize 匹配。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和采样计数的引用及相关元数据。调用者有责任确保原生资源在必要时一直存在。
此函数在 Qt 6.8 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.2]
QQuickRenderTarget QQuickRenderTarget::fromOpenGLRenderBuffer(uint renderbufferId, const QSize &pixelSize, int sampleCount = 1)
返回一个新的QQuickRenderTarget ,引用renderbufferId 指定的 OpenGL 渲染缓冲器对象。
该呈现缓冲区将用作内部帧缓冲区对象的颜色附件。提供此函数的目的是允许使用外部缓冲区(如 EGLImageKHR)来定位应用程序创建的呈现缓冲区。一旦应用程序调用了glEGLImageTargetRenderbufferStorageOES,就可以将呈现缓冲区传递给此函数。
pixelSize 指定图像大小(像素)。
sampleCount 指定采样个数。0 或 1 表示没有多重采样,而 4 或 8 等值则表示本地对象是多重采样呈现缓冲区。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含引用以及大小和采样计数的相关元数据。调用者有责任确保原生资源在必要时一直存在。
此函数在 Qt 6.2 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.4]
QQuickRenderTarget QQuickRenderTarget::fromOpenGLTexture(uint textureId, uint format, const QSize &pixelSize, int sampleCount = 1)
返回一个新的QQuickRenderTarget ,引用textureId 指定的 OpenGL 纹理对象。
format 指定纹理的本地内部格式。只能使用 Qt 渲染基础架构支持的纹理格式。
pixelSize 指定图像的大小(以像素为单位)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
在Qt Quick 场景图使用的渲染上下文中,OpenGL 对象名称textureId 必须是一个有效名称。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含引用以及大小和采样计数的相关元数据。调用者有责任在必要时确保本地资源的存在。
此函数在 Qt 6.4 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static]
QQuickRenderTarget QQuickRenderTarget::fromOpenGLTexture(uint textureId, const QSize &pixelSize, int sampleCount = 1)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用textureId 指定的 OpenGL 纹理对象。假定纹理的格式为 GL_RGBA(GL_RGBA8)。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
在Qt Quick 场景图使用的渲染上下文中,OpenGL 对象名称textureId 必须是一个有效名称。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含引用以及大小和采样计数的相关元数据。调用者有责任确保本地资源的存在时间。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.8]
QQuickRenderTarget QQuickRenderTarget::fromOpenGLTexture(uint textureId, uint format, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用textureId 指定的 OpenGL 2D 纹理或纹理数组对象。
format 指定纹理的本地内部格式。只能使用 Qt 渲染基础架构支持的纹理格式。
pixelSize 指定图像的大小(像素)。目前只支持二维纹理和二维纹理数组。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理,除非 包含 。在这种情况下, 被假定为非多重采样的二维纹理或二维纹理数组,而 则定义所需的采样数目。生成的 将使用自动创建的中间多采样纹理(或纹理数组)作为色彩附件,并将采样解析为 。当本地 OpenGL 纹理还不是多采样时,建议采用这种方法来执行 MSAA。flags MultisampleResolve textureId sampleCount QQuickRenderTarget textureId
当arraySize 大于 1 时,意味着多视图渲染(GL_OVR_multiview,QRhiColorAttachment::setMultiViewCount() ),这与 VR/AR 尤为相关。在这种情况下,arraySize 是视图的数量,通常是2
。有关在Qt Quick 场景图中启用多视图渲染的详情,请参阅QSGMaterial::viewCount() 。
深度模版缓冲区(如适用)会自动创建和使用。当颜色缓冲区为多采样时,深度模版缓冲区也将自动为多采样。对于多视图渲染,深度模版纹理将自动成为一个数组,并与arraySize 匹配。
在Qt Quick 场景图使用的渲染上下文中,OpenGL 对象名称textureId 必须是有效的 2D 纹理名称。当arraySize 大于 1 时,textureId 必须是有效的二维纹理数组名称。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和采样计数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
注意: 该重载的实现与 OpenGL ES 2.0 或 3.0 不兼容,至少需要 OpenGL ES 3.1。(或桌面上的 OpenGL 3.0)。
此函数在 Qt 6.8 中引入。
另请参阅 QQuickWindow::setRenderTarget(),QQuickRenderControl, 和fromOpenGLTexture().
[static, since 6.4]
QQuickRenderTarget QQuickRenderTarget::fromPaintDevice(QPaintDevice *device)
返回一个新的QQuickRenderTarget ,引用device 指定的绘画设备对象。
只有在使用Qt Quick 的software
后端运行时,才可使用将渲染重定向到QPaintDevice 的选项。
注意: QQuickRenderTarget 并不拥有device 的所有权,调用者有责任确保该对象在必要时一直存在。
此函数在 Qt 6.4 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.6]
QQuickRenderTarget QQuickRenderTarget::fromRhiRenderTarget(QRhiRenderTarget *renderTarget)
返回引用现有renderTarget 的新QQuickRenderTarget 。
renderTarget 在大多数情况下,它将是一个 ,这样就可以将 场景的渲染引导到 中。QRhiTextureRenderTarget Qt Quick QRhiTexture
注意: 生成的QQuickRenderTarget 并不拥有renderTarget 和任何底层本地资源,它只包含引用以及大小和样本数的相关元数据。调用者有责任确保所引用的资源在必要时一直存在。
此函数在 Qt 6.6 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.4]
QQuickRenderTarget QQuickRenderTarget::fromVulkanImage(VkImage image, VkImageLayout layout, VkFormat format, const QSize &pixelSize, int sampleCount = 1)
返回一个新的QQuickRenderTarget ,引用image 指定的 Vulkan 图像对象。还必须提供图像的当前layout 。
format 指定图像的 VkFormat。只能使用 Qt 渲染基础架构支持的图像格式。
pixelSize 指定图像的大小(像素)。目前只支持二维纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理。
该图像将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
此函数在 Qt 6.4 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static]
QQuickRenderTarget QQuickRenderTarget::fromVulkanImage(VkImage image, VkImageLayout layout, const QSize &pixelSize, int sampleCount = 1)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用image 指定的 Vulkan 图像对象。图像格式假定为 VK_FORMAT_R8G8B8A8_UNORM。
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而 4 或 8 这样的值则表示本地对象是多重采样纹理。
该纹理将作为Qt Quick 场景图使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)将自动创建和使用。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和样本数的引用和相关元数据。调用者有责任确保本地资源的存在时间。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
[static, since 6.8]
QQuickRenderTarget QQuickRenderTarget::fromVulkanImage(VkImage image, VkImageLayout layout, VkFormat format, VkFormat viewFormat, QSize pixelSize, int sampleCount, int arraySize, QQuickRenderTarget::Flags flags)
这是一个重载函数。
返回一个新的QQuickRenderTarget ,引用image 指定的 Vulkan 图像对象。还必须提供图像的当前layout 。图像必须是二维纹理或二维纹理数组。
format 指定图像的 VkFormat。只能使用 Qt 渲染基础架构支持的图像格式。
viewFormat 通常设置为与 相同的值。在某些情况下,例如当渲染到具有 格式的纹理时,如果不希望在着色器写入时进行线性->sRGB 的隐式转换,则该值可以不同。(例如, 的 和 的 )。format _SRGB
format VK_FORMAT_R8G8B8A8_SRGB
viewFormat VK_FORMAT_R8G8B8A8_UNORM
pixelSize 指定图像的大小(像素)。目前只支持 2D 纹理。
sampleCount 指定样本数。0 或 1 表示没有多重采样,而像 4 或 8 这样的值则表示本地对象是多重采样纹理,除非 包含 。在这种情况下, 被假定为非多重采样的二维纹理或二维纹理数组,而 则定义所需的采样数目。生成的 将使用自动创建的中间多采样纹理(或纹理数组)作为色彩附件,并将采样解析为 。当本地 Vulkan 图像还不是多采样时,建议采用这种方法来执行 MSAA。flags MultisampleResolve image sampleCount QQuickRenderTarget image
数组元素(层)的数量在arraySize 中给出。arraySize 是视图数,通常为2
。有关在Qt Quick 场景图中启用多视图渲染的详情,请参阅QSGMaterial::viewCount() 。
纹理被用作Qt Quick 场景图所使用的渲染目标的第一个颜色附件。深度模版缓冲区(如适用)会自动创建和使用。当颜色缓冲区为多采样时,深度模版缓冲区也会自动为多采样。对于多视图渲染,深度钢网纹理将自动成为一个数组,并与arraySize 匹配。
注意: 生成的QQuickRenderTarget 并不拥有任何本地资源,它只包含大小和采样计数的引用及相关元数据。调用者有责任确保原生资源在必要时一直存在。
此函数在 Qt 6.8 中引入。
另请参阅 QQuickWindow::setRenderTarget() 和QQuickRenderControl 。
bool QQuickRenderTarget::isNull() const
如果QQuickRenderTarget 是默认构造,不引用本地对象,则返回 true。
[since 6.4]
bool QQuickRenderTarget::mirrorVertically() const
Returns 返回呈现目标是否垂直镜像。
默认值为false
。
此函数在 Qt 6.4 中引入。
另请参阅 setMirrorVertically()。
[since 6.8]
void QQuickRenderTarget::setDepthTexture(QRhiTexture *texture)
请求使用给定的texture 作为深度或深度模板缓冲区。texture 的所有权不被承认。
只有在相关情况下,才会考虑该请求。例如,调用此函数对fromRhiRenderTarget()、fromPaintDevice() 或fromOpenGLRenderBuffer() 没有影响。
通常情况下,深度-模版缓冲区会自动创建,对QQuickRenderTarget 的用户来说是透明的。因此,在大多数情况下,使用QQuickRenderTarget 时无需调用此函数。不过,在特殊情况下,有必要提供一种纹理来渲染深度(或深度和模版)数据,而不是让Qt Quick 创建自己的中间纹理或缓冲区。OpenXR及其扩展(如XR_KHR_composition_layer_depth)就是一个例子。为了向 XR 合成器 "提交深度缓冲区",实际上必须从 OpenXR(从 XrSwapchain)获取已创建的深度(深度模板)纹理,并将该纹理用作深度数据的渲染目标。如果没有这个函数,就不可能做到这一点。
注意: texture 始终是非多重采样的二维纹理或纹理数组(用于多视图)。如果涉及 MSAA,无论是否设置了MultisampleResolve 标志,采样都会在渲染通道结束时解析为texture 。只有当底层 3D API 支持 MSAA 时,深度(深度模版)纹理才支持 MSAA,而且这种支持并不普遍。详情请参见the relevant QRhi feature flag 。在不支持此功能的情况下,如果结合自定义深度纹理请求多重采样,则在渲染过程中不会触及texture ,并会打印警告。
注意: 就 OpenGL 和 OpenGL ES 而言,使用深度纹理在 OpenGL ES 2.0 上不起作用,至少需要 OpenGL ES 3.0。如果没有至少 OpenGL ES 3.1 或 OpenGL 3.0(桌面版),则无法使用多采样(MSAA)支持。
此功能在 Qt 6.8 中引入。
另请参阅 depthTexture()。
[since 6.3]
void QQuickRenderTarget::setDevicePixelRatio(qreal ratio)
将此呈现目标的设备像素比率设置为ratio 。这是设备像素与独立设备像素之间的比率。
请注意,如果QQuickRenderControl::renderWindow() 被重新实现以返回有效的QWindow ,指定的设备像素比例值将被忽略。
此函数在 Qt 6.3 中引入。
另请参阅 devicePixelRatio() 。
[since 6.4]
void QQuickRenderTarget::setMirrorVertically(bool enable)
设置绘制时应垂直镜像到enable 的渲染目标内容大小。这样就可以轻松集成不符合标准预期的第三方呈现代码。
注意: 使用software
后端时,不应使用此函数。
此函数在 Qt 6.4 中引入。
另请参阅 mirrorVertically()。
相关非成员
[noexcept]
bool operator!=(const QQuickRenderTarget &a, const QQuickRenderTarget &b)
如果a 和b 指向不同的本地对象集,或相关数据(大小、样本数)不匹配,则返回 true。
[noexcept]
bool operator==(const QQuickRenderTarget &a, const QQuickRenderTarget &b)
如果a 和b 指向同一组本地对象,且相关数据(大小、样本数)匹配,则返回 true。
© 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.