QRhiColorAttachment Class

Describes the a single color attachment of a render target. 更多...

头: #include <QRhiColorAttachment>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Since: Qt 6.6

公共函数

QRhiColorAttachment ()
QRhiColorAttachment (QRhiTexture * texture )
QRhiColorAttachment (QRhiRenderBuffer * renderBuffer )
int layer () const
int level () const
(从 6.7 起) int multiViewCount () const
QRhiRenderBuffer * renderBuffer () const
int resolveLayer () const
int resolveLevel () const
QRhiTexture * resolveTexture () const
void setLayer (int layer )
void setLevel (int level )
(从 6.7 起) void setMultiViewCount (int count )
void setRenderBuffer (QRhiRenderBuffer * rb )
void setResolveLayer (int layer )
void setResolveLevel (int level )
void setResolveTexture (QRhiTexture * tex )
void setTexture (QRhiTexture * tex )
QRhiTexture * texture () const

详细描述

A color attachment is either a QRhiTexture QRhiRenderBuffer . The former, i.e. when texture () is set, is used in most cases. QRhiColorAttachment is commonly used in combination with QRhiTextureRenderTargetDescription .

注意: texture () 和 renderBuffer () cannot be both set (be non-null at the same time).

设置 renderBuffer instead is recommended only when multisampling is needed. Relying on QRhi::MultisampleRenderBuffer is a better choice than QRhi::MultisampleTexture in practice since the former is available in more run time configurations (e.g. when running on OpenGL ES 3.0 which has no support for multisample textures, but does support multisample renderbuffers).

When targeting a non-multisample texture, the layer () 和 level () indicate the targeted layer (face index 0-5 for cubemaps) and mip level. For 3D textures layer () specifies the slice (one 2D image within the 3D texture) to render to. For texture arrays layer () is the array index.

texture () 或 renderBuffer () is multisample, resolveTexture () can be set optionally. When set, samples are resolved automatically into that (non-multisample) texture at the end of the render pass. When rendering into a multisample renderbuffers, this is the only way to get resolved, non-multisample content out of them. Multisample textures allow sampling in shaders so for them this is just one option.

注意: when resolving is enabled, the multisample data may not be written out at all. This means that the multisample texture () must not be used afterwards with shaders for sampling when resolveTexture () 有设置。

注意: This is a RHI API with limited compatibility guarantees, see QRhi 了解细节。

另请参阅 QRhiTextureRenderTargetDescription .

成员函数文档编制

[constexpr noexcept] QRhiColorAttachment:: QRhiColorAttachment ()

Constructs an empty color attachment description.

QRhiColorAttachment:: QRhiColorAttachment ( QRhiTexture * texture )

Constructs a color attachment description that specifies texture as the associated color buffer.

QRhiColorAttachment:: QRhiColorAttachment ( QRhiRenderBuffer * renderBuffer )

Constructs a color attachment description that specifies renderBuffer as the associated color buffer.

int QRhiColorAttachment:: layer () const

Returns the layer index (cubemap face or array layer). 0 by default.

另请参阅 setLayer ().

int QRhiColorAttachment:: level () const

Returns the mip level. 0 by default.

另请参阅 setLevel ().

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

Returns the currently set number of views. Defaults to 0 which indicates the render target with this color attachment is not going to be used with multiview rendering.

该函数在 Qt 6.7 引入。

另请参阅 setMultiViewCount ().

QRhiRenderBuffer *QRhiColorAttachment:: renderBuffer () const

Returns the renderbuffer this attachment description references, or nullptr 若没有。

In practice associating a QRhiRenderBuffer 采用 QRhiColorAttachment makes the most sense when setting up multisample rendering via a multisample color renderbuffer that is then resolved into a non-multisample texture at the end of the render pass.

另请参阅 setRenderBuffer ().

int QRhiColorAttachment:: resolveLayer () const

Returns the currently set resolve texture layer. Defaults to 0.

另请参阅 setResolveLayer ().

int QRhiColorAttachment:: resolveLevel () const

Returns the currently set resolve texture mip level. Defaults to 0.

另请参阅 setResolveLevel ().

QRhiTexture *QRhiColorAttachment:: resolveTexture () const

Returns the resolve texture this attachment description references, or nullptr 若没有。

Setting a non-null resolve texture is applicable when the attachment references a multisample texture or renderbuffer. The QRhiTexture in the resolveTexture() is then a non-multisample 2D texture (or texture array) with the same size (but a sample count of 1). The multisample content is automatically resolved into this texture at the end of each render pass.

另请参阅 setResolveTexture ().

void QRhiColorAttachment:: setLayer ( int layer )

设置 layer 索引。

另请参阅 layer ().

void QRhiColorAttachment:: setLevel ( int level )

Sets the mip level .

另请参阅 level ().

[since 6.7] void QRhiColorAttachment:: setMultiViewCount ( int count )

Sets the view count . Setting a value larger than 1 indicates that the render target with this color attachment is going to be used with multiview rendering. The default value is 0. Values smaller than 2 indicate no multiview rendering.

count 被设为 2 or greater, the color attachment must be associated with a 2D texture array. layer () 和 multiViewCount () together define the range of texture array elements that are targeted during multiview rendering.

例如,若 layer is 0 and multiViewCount is 2 , the texture array must have 2 (or more) elements, and the multiview rendering will target elements 0 and 1. The gl_ViewIndex variable in the shaders has a value of 0 or 1 then, where view 0 corresponds to the texture array element 0 , and view 1 to the array element 1 .

注意: Setting a count larger than 1, using a texture array as texture (), and calling beginPass () 在 QRhiTextureRenderTarget with this color attachment implies multiview rendering for the entire render pass. multiViewCount () should not be set unless multiview rendering is wanted. Multiview cannot be used with texture types other than 2D texture arrays. (although 3D textures may work, depending on the graphics API and backend; applications are nonetheless advised not to rely on that and only use 2D texture arrays as the render targets of multiview rendering)

GL_OVR_multiview for more details regarding multiview rendering. Do note that Qt requires GL_OVR_multiview2 as well, when running on OpenGL (ES).

Multiview rendering is available only when the MultiView feature is reported as supported from isFeatureSupported ().

注意: For portability, be aware of limitations that exist for multiview rendering with some of the graphics APIs. It is recommended that multiview render passes do not rely on any of the features that GL_OVR_multiview declares as unsupported. The one exception is shader stage outputs other than gl_Position 从属 gl_ViewIndex : that can be relied on (even with OpenGL) because QRhi never reports multiview as supported without GL_OVR_multiview2 also being present.

注意: Multiview rendering is not supported in combination with tessellation or geometry shaders, even though some implementations of some graphics APIs may allow this.

该函数在 Qt 6.7 引入。

另请参阅 multiViewCount ().

void QRhiColorAttachment:: setRenderBuffer ( QRhiRenderBuffer * rb )

Sets the renderbuffer rb .

注意: texture () 和 renderBuffer () cannot be both set (be non-null at the same time).

另请参阅 renderBuffer ().

void QRhiColorAttachment:: setResolveLayer ( int layer )

Sets the resolve texture layer to use.

另请参阅 resolveLayer ().

void QRhiColorAttachment:: setResolveLevel ( int level )

Sets the resolve texture mip level to use.

另请参阅 resolveLevel ().

void QRhiColorAttachment:: setResolveTexture ( QRhiTexture * tex )

Sets the resolve texture tex .

tex is expected to be a 2D texture or a 2D texture array. In either case, resolving targets a single mip level of a single layer (array element) of tex . The mip level and array layer are specified by resolveLevel () 和 resolveLayer ().

An exception is multiview : when the color attachment is associated with a texture array and multiview is enabled, the resolve texture must also be a texture array with sufficient elements for all views. In this case all elements that correspond to views are resolved automatically; the behavior is similar to the following pseudo-code:

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

Setting a non-multisample texture to resolve a multisample texture or renderbuffer automatically at the end of the render pass is often preferable to working with multisample textures (and not setting a resolve texture), because it avoids the need for writing dedicated fragment shaders that work exclusively with multisample textures ( sampler2DMS , texelFetch , etc.), and rather allows using the same shader as one would if the attachment's texture was not multisampled to begin with. This comes at the expense of an additional resource (the non-multisample tex ).

另请参阅 resolveTexture ().

void QRhiColorAttachment:: setTexture ( QRhiTexture * tex )

Sets the texture tex .

注意: texture () 和 renderBuffer () cannot be both set (be non-null at the same time).

另请参阅 texture ().

QRhiTexture *QRhiColorAttachment:: texture () const

Returns the texture this attachment description references, or nullptr 若没有。

另请参阅 setTexture ().