QRhiColorAttachment 类

描述渲染目标的单个颜色附加物。更多...

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

公共函数

QRhiColorAttachment()
QRhiColorAttachment(QRhiTexture *texture)
QRhiColorAttachment(QRhiRenderBuffer *renderBuffer)
intlayer() const
intlevel() const
(since 6.7) intmultiViewCount() const
QRhiRenderBuffer *renderBuffer() const
intresolveLayer() const
intresolveLevel() const
QRhiTexture *resolveTexture() const
voidsetLayer(int layer)
voidsetLevel(int level)
(since 6.7) voidsetMultiViewCount(int count)
voidsetRenderBuffer(QRhiRenderBuffer *rb)
voidsetResolveLayer(int layer)
voidsetResolveLevel(int level)
voidsetResolveTexture(QRhiTexture *tex)
voidsetTexture(QRhiTexture *tex)
QRhiTexture *texture() const

详细说明

颜色附加物可以是 QRhiTextureQRhiRenderBuffer。当设置了 texture() 时,通常是前者。QRhiColorAttachment 通常与 QRhiTextureRenderTargetDescription 一起使用。

注意:texture() 和 renderBuffer() 不能同时设置(同时为非空)。

建议仅在没有抗锯齿需求时设置 renderBuffer。在实际操作中,依赖于 QRhi::MultisampleRenderBuffer 优于 QRhi::MultisampleTexture,因为前者在更多的运行时配置中可用(例如,当在 OpenGL ES 3.0 上运行,该 API 不支持多采样纹理,但支持多采样渲染缓冲区)。

当目标是一个非多采样纹理时,layer()level() 表示目标层(对于立方体贴图,面索引 0-5)和_mip_级别。对于3D纹理,layer() 指定要渲染的切片(3D纹理中的一个2D图像)。对于纹理数组,layer() 是数组索引。

texture()renderBuffer() 是多采样的时,_resolveTexture_() 可以选择性地设置。当设置时,样本将在渲染流程结束时自动解析到该(非多采样)纹理中。当渲染到多采样渲染缓冲区时,这是获取解析、非多采样内容的唯一方法。多采样纹理允许在着色器中进行采样,因此对于它们这只是一个选项。

注意:当启用解析时,可能不会写出多采样数据。这意味着在设置 _resolveTexture_() 后,不得使用多采样 texture() 与着色器进行采样。

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

另请参阅:QRhiTextureRenderTargetDescription

成员函数文档

[constexpr noexcept] QRhiColorAttachment::QRhiColorAttachment()

构建一个空的颜色附加描述。

QRhiColorAttachment::QRhiColorAttachment(QRhiTexture *texture)

构建一个颜色附加描述,指定 texture 作为关联的颜色缓冲。

QRhiColorAttachment::QRhiColorAttachment(QRhiRenderBuffer *renderBuffer)

构建一个颜色附加描述,指定 renderBuffer 作为关联的颜色缓冲。

int QRhiColorAttachment::layer() const

返回层索引(立方体贴图面或数组层)。默认为0。

另请参阅:setLayer

int QRhiColorAttachment::level() const

返回_mip_级别。默认为0。

另请参阅:setLevel

[since 6.7] int QRhiColorAttachment::multiViewCount() const

返回当前设置的视图数。默认为0,表示带有此颜色附加的渲染目标将不用于多视图渲染。

此函数从Qt 6.7引入。

另请参阅:setMultiViewCount

QRhiRenderBuffer *QRhiColorAttachment::renderBuffer() const

返回此附加描述引用的渲染缓冲区,如果没有则返回 nullptr

在实践中,在通过多采样颜色渲染缓冲区设置多采样渲染时,将 QRhiRenderBufferQRhiColorAttachment 关联最有意义,该缓冲区在渲染流程结束时解析到一个非多采样纹理中。

另请参阅:setRenderBuffer

int QRhiColorAttachment::resolveLayer() const

返回当前设置的解析纹理层。默认为0。

另见 setResolveLayer()。

int QRhiColorAttachment::resolveLevel() const

返回当前设置的解析纹理MIP级别。默认为0。

另见 setResolveLevel()。

QRhiTexture *QRhiColorAttachment::resolveTexture() const

返回此附件描述引用的解析纹理,如果没有则返回 nullptr

设置非空解析纹理适用于此附加引用了多采样纹理或渲染缓冲区的情况。然后在 resolveTexture() 中的 QRhiTexture 是非多采样的2D纹理(或纹理数组),具有相同的大小(但样本数为1)。在每个渲染过程中结束时,会将多采样内容自动解析到该纹理中。

另见 setResolveTexture()。

void QRhiColorAttachment::setLayer(int layer)

设置 索引。

另见 layer()。

void QRhiColorAttachment::setLevel(int level)

设置 MIP 级别

另见 level()。

[自6.7起] void QRhiColorAttachment::setMultiViewCount(int count)

设置 视图 数量。将值设置为大于1表示将使用多视图渲染。默认值为0。小于2的值表示不进行多视图渲染。

count 设置为 2 或更大时,颜色附加必须与2D纹理数组相关联。 layer() 和 multiViewCount() 一起定义了在多视图渲染期间的目标纹理数组元素范围。

例如,如果 layer0multiViewCount2,则纹理数组必须有两个(或更多)元素,多视图渲染将针对元素0和1。此时,着色器中的 gl_ViewIndex 变量的值为 01,其中视图 0 对应纹理数组元素 0,视图 1 对应数组元素 1

注意:count 设置为大于1的值,使用纹理数组作为 texture(),并在具有此颜色附加的 QRhiTextureRenderTarget 上调用 beginPass(),将暗示整个渲染过程中的多视图渲染。不应设置 multiViewCount() 除非需要多视图渲染。多视图无法与其他非2D纹理类型的纹理一起使用。(尽管3D纹理可能工作,具体取决于图形API和后端;应用仍然建议不要依赖这一特性,并且只使用2D纹理数组作为多视图渲染的渲染目标)

有关多视图渲染的更多详细信息,请参阅GL_OVR_multiview。请注意,Qt在OpenGL(ES)上运行时,也需要GL_OVR_multiview2

只有在报告MultiView功能受支持时,才可使用isFeatureSupported(),多视图渲染才是可用的。

注意:由于某些图形API的多视图渲染存在限制,因此为了便携性,请务必注意这些限制。建议在多视图渲染过程中不依赖于GL_OVR_multiview声明的任何不被支持的特性。唯一的例外是依赖于gl_ViewIndex的除gl_Position以外的着色器阶段输出:即使在OpenGL中也可以依赖这一特性,因为QRhiGL_OVR_multiview2也存在的情况下才会报告多视图支持。

注意:多视图渲染不支持与曲面细分或几何着色器结合使用,尽管某些图形API的实现可能允许这种情况。

此函数从Qt 6.7引入。

另请参阅multiViewCount()。

void QRhiColorAttachment::setRenderBuffer(QRhiRenderBuffer *rb)

设置渲染缓冲区rb

注意:texture() 和 renderBuffer() 不能同时设置(同时为非空)。

另请参阅renderBuffer

void QRhiColorAttachment::setResolveLayer(int layer)

设置使用的解决纹理layer

另请参阅resolveLayer

void QRhiColorAttachment::setResolveLevel(int level)

设置使用的解决纹理米普level

另请参阅resolveLevel

void QRhiColorAttachment::setResolveTexture(QRhiTexture *tex)

设置使用的解决纹理tex

tex预期是一个2D纹理或一个2D纹理数组。在任一情况下,解决都将针对tex的单个层(数组元素)的单个米普级别。米普级别和数组层由resolveLevel()和resolveLayer()指定。

一个例外是multiview:当颜色附件与一个纹理数组和启用多视图相关联时,解决纹理也必须是一个有足够元素供所有视图使用的纹理数组。在这种情况下,所有对应于视图的元素都将自动解决;行为类似于以下伪代码

for (i = 0; i < multiViewCount(); ++i)
    resolve texture's layer() + i into resolveTexture's resolveLayer() + i

将非多采样纹理设置在着色器传递结束时自动解决多采样纹理或渲染缓冲区,通常比使用多采样纹理(不设置解决纹理)更可取,因为这避免了编写仅与多采样纹理(sampler2DMStexelFetch等)工作的专用片段着色器的需要,而允许使用与该附件纹理最初未被多采样一样相同的片段着色器。这以一个额外资源(非多采样tex)为代价。

另请参阅resolveTexture

void QRhiColorAttachment::setTexture(QRhiTexture *tex)

设置纹理tex

注意:texture() 和 renderBuffer() 不能同时设置(同时为非空)。

另请参阅纹理

QRhiTexture *QRhiColorAttachment::texture() const

返回此附件描述引用的纹理,如果没有,则返回nullptr

另请参阅setTexture

© 2024 The Qt Company Ltd. 包含在此处的文档贡献的版权归其各自所有者所有。在此提供文档受GNU自由文档许可证版本1.3的条款约束,由自由软件基金会发布。Qt及其相关标志是The Qt Company Ltd在芬兰及全球其他国家的商标。所有其他商标均属其各自所有者所有。