QRhiTextureRenderTargetDescription 类

描述了渲染目标的颜色和深度(或深度/模板)附件。 更多...

头文件 #include <QRhiTextureRenderTargetDescription>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
Qt 6.6

公共函数

QRhiTextureRenderTargetDescription()
QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment)
QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiRenderBuffer *depthStencilBuffer)
QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiTexture *depthTexture)
const QRhiColorAttachment *cbeginColorAttachments() const
const QRhiColorAttachment *cendColorAttachments() const
const QRhiColorAttachment *colorAttachmentAt(qsizetype index) const
qsizetypecolorAttachmentCount() const
QRhiRenderBuffer *depthStencilBuffer() const
QRhiTexture *depthTexture() const
voidsetColorAttachments(std::initializer_list<QRhiColorAttachment> list)
voidsetColorAttachments(InputIterator first, InputIterator last)
voidsetDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)
voidsetDepthTexture(QRhiTexture *texture)

详细描述

纹理渲染目标有零个或多个作为颜色附件的纹理,零个或一个作为深度/模板缓冲区的合成渲染缓冲区或零个或一个作为深度缓冲区的纹理。

注意:depthStencilBuffer() 和 depthTexture() 不能同时设置(不能同时非空)。

让我们看看如何与 QRhiTextureRenderTarget 结合的一些示例用法。

由于构造函数,仅针对纹理(没有深度/模板缓冲区)很简单

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(256, 256), 1, QRhiTexture::RenderTarget);
texture->create();
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ texture }));

以下创建了一个纹理渲染目标,将其设置为针对纹理的米柏等级 #2

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget | QRhiTexture::MipMapped);
texture->create();
QRhiColorAttachment colorAtt(texture);
colorAtt.setLevel(2);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ colorAtt });

另一个示例,这次是渲染到深度纹理

QRhiTexture *shadowMap = rhi->newTexture(QRhiTexture::D32F, QSize(1024, 1024), 1, QRhiTexture::RenderTarget);
shadowMap->create();
QRhiTextureRenderTargetDescription rtDesc;
rtDesc.setDepthTexture(shadowMap);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget(rtDesc);

一个非常常见的案例,使用纹理作为颜色附加对象,以及使用渲染缓冲区作为深度/模板来启用深度测试。

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1. QRhiTexture::RenderTarget);
texture->create();
QRhiRenderBuffer *depthStencil = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, QSize(512, 512));
depthStencil->create();
QRhiTextureRenderTargetDescription rtDesc({ texture }, depthStencil);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget(rtDesc);

最后,为了以可移植的方式启用多采样渲染(因此也支持OpenGL ES 3.0),使用一个QRhiRenderBuffer作为(多采样)颜色缓冲区,然后将其解算为常规(非多采样)的2D纹理。为了启用深度测试,还需要使用相同采样数的深度-模板缓冲区。

QRhiRenderBuffer *colorBuffer = rhi->newRenderBuffer(QRhiRenderBuffer::Color, QSize(512, 512), 4); // 4x MSAA
colorBuffer->create();
QRhiRenderBuffer *depthStencil = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, QSize(512, 512), 4);
depthStencil->create();
QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget);
texture->create();
QRhiColorAttachment colorAtt(colorBuffer);
colorAtt.setResolveTexture(texture);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ colorAtt, depthStencil });

注意:这是一个RHI API,具有有限的兼容性保证,有关详细信息请参阅QRhi

另请参阅:QRhiColorAttachmentQRhiTextureRenderTarget

成员函数文档

[constexpr noexcept] QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription()

构建一个空的纹理渲染目标描述。

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment)

使用colorAttachment描述的一个附件构建纹理渲染目标描述。

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiRenderBuffer *depthStencilBuffer)

使用colorAttachment描述的一个颜色附件和depthStencilBuffer描述的一个深度/模板附件构建纹理渲染目标描述。

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiTexture *depthTexture)

使用colorAttachment描述的一个颜色附件和depthTexture描述的一个深度附件构建纹理渲染目标描述。

注意:depthTexture必须有一个合适的格式,例如QRhiTexture::D16QRhiTexture::D32F

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::cbeginColorAttachments() const

返回指向附件列表中第一个项目的const迭代器。

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::cendColorAttachments() const

返回指向附件列表最后一个项目之后的const迭代器。

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::colorAttachmentAt(qsizetype index) const

返回指定index的颜色附件。

qsizetype QRhiTextureRenderTargetDescription::colorAttachmentCount() const

返回当前设置的附件数量。

QRhiRenderBuffer *QRhiTextureRenderTargetDescription::depthStencilBuffer() const

返回用作深度-模板缓冲区的渲染缓冲区,如果没有设置,则返回nullptr

另请参阅:setDepthStencilBuffer

QRhiTexture *QRhiTextureRenderTargetDescription::depthTexture() const

返回当前引用的深度纹理,如果没有设置,则返回 nullptr

另请参阅 setDepthTexture

void QRhiTextureRenderTargetDescription::setColorAttachments(std::initializer_list<QRhiColorAttachment> list)

设置颜色附件的 list

template <typename InputIterator> void QRhiTextureRenderTargetDescription::setColorAttachments(InputIterator first, InputIterator last)

通过迭代器 firstlast 设置颜色附件的列表。

void QRhiTextureRenderTargetDescription::setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)

设置深度-模板缓冲区 renderBuffer。不是必需的,例如,当在渲染通道的任何图形管道中不使用深度测试/写入或模板相关功能时,它可以设置为 nullptr

注意:depthStencilBuffer() 和 depthTexture() 不能同时设置(不能同时非空)。

使用2D QRhiTexture 作为深度或深度/模板缓冲区非常常见,也是应用的建议方法。使用 QRhiTexture,因此 setDepthTexture() 变得相关,如果是之后访问深度数据(例如在着色器中采样),或者当涉及 多视渲染(因为深度纹理必须是纹理数组)。

另请参阅 depthStencilBuffer() 和 setDepthTexture

void QRhiTextureRenderTargetDescription::setDepthTexture(QRhiTexture *texture)

设置深度-模板缓冲区的 texture。这是 setDepthStencilBuffer 的替代方案,其中提供的是 QRhiTexture 而不是 QRhiRenderBuffer,其类型适合(例如,QRhiTexture::D32F)。

注意:depthStencilBuffer() 和 depthTexture() 不能同时设置(不能同时非空)。

texture 可以是一个2D纹理,也可以是一个2D纹理数组(当支持纹理数组时)。尤其是与 多视渲染 相关时,指定纹理数组是相关的。

注意:如果 texture 是具有模板组件的格式,例如 QRhiTexture::D24S8,它还作为模板缓冲区。

另请参阅 depthTexture() 和 setDepthStencilBuffer

© 2024 The Qt Company Ltd. 本文档的贡献是各自所有者的版权。本文档是根据由自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款许可的。Qt及其标志是芬兰和/或其他国家/地区的The Qt Company Ltd的商标。所有其他商标均为各自所有者的财产。