![]() |
Qt 6.x
The Qt SDK
|
\inmodule QtGui More...
#include <qrhi.h>
Public Member Functions | |
QRhiColorAttachment ()=default | |
Constructs an empty color attachment description. | |
QRhiColorAttachment (QRhiTexture *texture) | |
Constructs a color attachment description that specifies texture as the associated color buffer. | |
QRhiColorAttachment (QRhiRenderBuffer *renderBuffer) | |
Constructs a color attachment description that specifies renderBuffer as the associated color buffer. | |
QRhiTexture * | texture () const |
void | setTexture (QRhiTexture *tex) |
Sets the texture tex. | |
QRhiRenderBuffer * | renderBuffer () const |
void | setRenderBuffer (QRhiRenderBuffer *rb) |
Sets the renderbuffer rb. | |
int | layer () const |
void | setLayer (int layer) |
Sets the layer index. | |
int | level () const |
void | setLevel (int level) |
Sets the mip level. | |
QRhiTexture * | resolveTexture () const |
void | setResolveTexture (QRhiTexture *tex) |
Sets the resolve texture tex. | |
int | resolveLayer () const |
void | setResolveLayer (int layer) |
Sets the resolve texture layer to use. | |
int | resolveLevel () const |
void | setResolveLevel (int level) |
Sets the resolve texture mip level to use. | |
int | multiViewCount () const |
void | setMultiViewCount (int count) |
Sets the view count. | |
\inmodule QtGui
Describes the a single color attachment of a render target.
A color attachment is either a QRhiTexture or a QRhiRenderBuffer. The former, i.e. when texture() is set, is used in most cases. QRhiColorAttachment is commonly used in combination with QRhiTextureRenderTargetDescription.
Setting 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() and 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.
When texture() or 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.
|
default |
Constructs an empty color attachment description.
QRhiColorAttachment::QRhiColorAttachment | ( | QRhiTexture * | texture | ) |
QRhiColorAttachment::QRhiColorAttachment | ( | QRhiRenderBuffer * | renderBuffer | ) |
|
inline |
Definition at line 580 of file qrhi.h.
Referenced by QD3D11TextureRenderTarget::create(), QGles2TextureRenderTarget::create(), QRhiD3D11::endPass(), and QRhiGles2::endPass().
|
inline |
Definition at line 583 of file qrhi.h.
Referenced by QD3D11TextureRenderTarget::create(), QGles2TextureRenderTarget::create(), QNullTextureRenderTarget::create(), and QRhiGles2::endPass().
|
inline |
Definition at line 595 of file qrhi.h.
Referenced by QGles2TextureRenderTarget::create(), and QRhiGles2::endPass().
|
inline |
In practice associating a QRhiRenderBuffer with a QRhiColorAttachment makes the most sense when setting up multisample rendering via a multisample \l{QRhiRenderBuffer::Type}{color} renderbuffer that is then resolved into a non-multisample texture at the end of the render pass.
Definition at line 577 of file qrhi.h.
Referenced by QD3D11TextureRenderTarget::create(), QGles2TextureRenderTarget::create(), QNullTextureRenderTarget::create(), QRhiD3D11::endPass(), QRhiGles2::endPass(), QMetalTextureRenderTarget::newCompatibleRenderPassDescriptor(), and QRhiRenderTargetAttachmentTracker::updateResIdList().
|
inline |
Definition at line 589 of file qrhi.h.
Referenced by QRhiD3D11::endPass(), and QRhiGles2::endPass().
|
inline |
Definition at line 592 of file qrhi.h.
Referenced by QRhiD3D11::endPass(), and QRhiGles2::endPass().
|
inline |
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.
Definition at line 586 of file qrhi.h.
Referenced by QRhiD3D11::endPass(), QRhiGles2::endPass(), QRhiGles2::enqueueBindFramebuffer(), and QRhiRenderTargetAttachmentTracker::updateResIdList().
|
inline |
Sets the layer index.
Definition at line 581 of file qrhi.h.
Referenced by QSSGRenderReflectionMap::addReflectionMapEntry(), QSSGRenderShadowMap::addShadowMapEntry(), and renderToKTXFileInternal().
|
inline |
Sets the mip level.
Definition at line 584 of file qrhi.h.
Referenced by QSSGRenderReflectionMap::addReflectionMapEntry(), and renderToKTXFileInternal().
|
inline |
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.
When count is set to 2
or greater, the color attachment must be associated with a 2D texture array. layer() and multiViewCount() together define the range of texture array elements that are targeted during multiview rendering.
For example, if 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
.
See \l{https://registry.khronos.org/OpenGL/extensions/OVR/OVR_multiview.txt}{GL_OVR_multiview} for more details regarding multiview rendering. Do note that Qt requires \l{https://registry.khronos.org/OpenGL/extensions/OVR/OVR_multiview2.txt}{GL_OVR_multiview2} as well, when running on OpenGL (ES).
Multiview rendering is available only when the \l{QRhi::MultiView}{MultiView} feature is reported as supported from \l{QRhi::isFeatureSupported()}{isFeatureSupported()}.
{gl_Position} depending on
{gl_ViewIndex}: that can be relied on (even with OpenGL) because QRhi never reports multiview as supported without
{GL_OVR_multiview2} also being present.
|
inline |
Sets the renderbuffer rb.
Definition at line 578 of file qrhi.h.
Referenced by QQuick3DSceneRenderer::synchronize().
|
inline |
|
inline |
|
inline |
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() and resolveLayer().
An exception is \l{setMultiViewCount()}{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: \badcode 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).
Definition at line 587 of file qrhi.h.
Referenced by QQuick3DSceneRenderer::synchronize().
|
inline |
Sets the texture tex.
Definition at line 575 of file qrhi.h.
Referenced by QSSGRenderShadowMap::addShadowMapEntry().
|
inline |
Definition at line 574 of file qrhi.h.
Referenced by QD3D11TextureRenderTarget::create(), QGles2TextureRenderTarget::create(), QNullTextureRenderTarget::create(), QRhiD3D11::endPass(), QRhiGles2::endPass(), QRhiGles2::enqueueBindFramebuffer(), QMetalTextureRenderTarget::newCompatibleRenderPassDescriptor(), renderToKTXFileInternal(), and QRhiRenderTargetAttachmentTracker::updateResIdList().