Sur cette page

QRhiTextureRenderTargetDescription Class

Décrit la couleur et la profondeur, ou les extensions de profondeur/pochoir, d'une cible de rendu. En savoir plus...

En-tête : #include <rhi/qrhi.h>
CMake : find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake : QT += gui-private
Depuis : Qt 6.6

Fonctions publiques

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
qsizetype colorAttachmentCount() const
(since 6.12) int depthLayer() const
(since 6.8) QRhiTexture *depthResolveTexture() const
QRhiRenderBuffer *depthStencilBuffer() const
QRhiTexture *depthTexture() const
void setColorAttachments(std::initializer_list<QRhiColorAttachment> list)
void setColorAttachments(InputIterator first, InputIterator last)
(since 6.12) void setDepthLayer(int depthLayer)
(since 6.8) void setDepthResolveTexture(QRhiTexture *tex)
void setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)
void setDepthTexture(QRhiTexture *texture)
(since 6.9) void setShadingRateMap(QRhiShadingRateMap *map)
(since 6.9) QRhiShadingRateMap *shadingRateMap() const

Description détaillée

Une cible de rendu de texture comporte zéro ou plusieurs textures en tant qu’attachements de couleur, zéro ou un tampon de rendu en tant que tampon combiné de profondeur/stencil, ou zéro ou une texture en tant que tampon de profondeur.

Remarque : les fonctions ` depthStencilBuffer()` et ` depthTexture()` ne peuvent pas être toutes deux définies (elles ne peuvent pas être non nulles en même temps).

Examinons quelques exemples d'utilisation en combinaison avec ` QRhiTextureRenderTarget`.

Grâce aux constructeurs, le ciblage d’une texture (et non d’un tampon de profondeur/stencil) est simple :

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

Le code suivant crée une cible de rendu de texture configurée pour cibler le niveau de mip #2 d’une texture :

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 });

Autre exemple, cette fois-ci pour effectuer un rendu dans une texture de profondeur :

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

Un cas très courant : utiliser une texture comme attache de couleur et un tampon de rendu comme tampon de profondeur/stencil pour activer le test de profondeur :

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);

Enfin, pour activer le rendu multi-échantillonnage de manière portable (et ainsi prendre également en charge OpenGL ES 3.0), on utilise un « QRhiRenderBuffer » comme tampon de couleur (multi-échantillonnage), puis on le convertit en une texture 2D standard (non multi-échantillonnée). Pour activer le test de profondeur, un tampon de profondeur-stencil, qui doit également utiliser le même nombre d’échantillons, est également utilisé :

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 });

Remarque : lorsque la résolution multisample est activée, les données multisample peuvent ne pas être écrites du tout. Cela signifie que la texture multi-échantillonnée d’une annexe de couleur ne doit pas être utilisée par la suite avec des shaders à des fins d’échantillonnage (ou à d’autres fins) lorsqu’une texture de résolution est définie, car le tampon de couleur multi-échantillonné n’est alors qu’un stockage intermédiaire sur lequel aucune donnée n’est réécrite sur certaines architectures de GPU. Voir PreserveColorContents pour plus de détails.

Remarque : lorsque vous utilisez ` setDepthTexture()` au lieu de ` setDepthStencilBuffer()`, et que les données de profondeur (stencil) ne présentent plus d’intérêt par la suite, activez l’indicateur `DoNotStoreDepthStencilContents` sur l’ QRhiTextureRenderTarget. Cela permet d’indiquer à l’API 3D sous-jacente que les données de profondeur/stencil peuvent être ignorées, ce qui peut potentiellement améliorer les performances avec les architectures GPU en mosaïque. Lorsque le tampon de profondeur-stencil est une texture de couleur à échantillonnage multiple ( QRhiRenderBuffer ) (et également pour la texture de couleur à échantillonnage multiple, voir la note précédente), cela est implicite ; en revanche, avec une texture de profondeur (stencil) à échantillonnag QRhiTexture, cette intention doit être déclarée explicitement. Par défaut, QRhi suppose que les données présentent un intérêt (par exemple, la texture de profondeur est échantillonnée dans un shader par la suite).

Remarque : il s’agit d’une API RHI dont la compatibilité n’est pas entièrement garantie ; voir QRhi pour plus de détails.

Voir également QRhiColorAttachment et QRhiTextureRenderTarget.

Documentation des fonctions membres

[constexpr noexcept default] QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription()

Crée une description de cible de rendu de texture vide.

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment)

Crée une description de cible de rendu de texture comportant un élément associé défini par colorAttachment.

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

Crée une description de cible de rendu de texture comportant deux pièces jointes : une pièce jointe de couleur décrite par colorAttachment et une pièce jointe de profondeur/stencil décrite par depthStencilBuffer.

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

Crée une description de cible de rendu de texture comportant deux annexes : une annexe de couleur décrite par colorAttachment et une annexe de profondeur décrite par depthTexture.

Remarque : depthTexture doit être au format approprié, tel que QRhiTexture::D16 ou QRhiTexture::D32F.

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::cbeginColorAttachments() const

Renvoie un itérateur constant pointant vers le premier élément de la liste des pièces jointes.

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::cendColorAttachments() const

Renvoie un itérateur const pointant juste après le dernier élément de la liste des pièces jointes.

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

Renvoie la pièce jointe de couleur située à l'index e indiquée.

qsizetype QRhiTextureRenderTargetDescription::colorAttachmentCount() const

Renvoie le nombre d'attaches de couleur actuellement définies.

[since 6.12] int QRhiTextureRenderTargetDescription::depthLayer() const

Renvoie l'index de la tranche de tableau à utiliser pour l'attachement « depth/stencil », ou -1 par défaut.

Cette fonction a été introduite dans Qt 6.12.

Voir également setDepthLayer() et setDepthTexture().

[since 6.8] QRhiTexture *QRhiTextureRenderTargetDescription::depthResolveTexture() const

Renvoie la texture vers laquelle une texture (ou un tableau de textures) de profondeur à échantillonnage multiple (ou de profondeur-stencil) est résolue. Renvoie « nullptr » s’il n’y en a pas, ce qui est le cas le plus courant.

Cette fonction a été introduite dans Qt 6.8.

Voir également setDepthResolveTexture(), QRhiColorAttachment::resolveTexture() et depthTexture().

QRhiRenderBuffer *QRhiTextureRenderTargetDescription::depthStencilBuffer() const

Renvoie le tampon de rendu utilisé comme tampon de profondeur-stencil, ou nullptr si aucun n'a été défini.

Voir également setDepthStencilBuffer().

QRhiTexture *QRhiTextureRenderTargetDescription::depthTexture() const

Renvoie la texture de profondeur actuellement référencée, ou ` nullptr ` si aucune n'a été définie.

Voir aussi setDepthTexture().

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

Définit l'list e des pièces jointes de couleur.

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

Définit la liste des pièces jointes de couleur à l'aide des itérateurs first et last.

[since 6.12] void QRhiTextureRenderTargetDescription::setDepthLayer(int depthLayer)

Définit l'index de la tranche du tableau à utiliser pour l'association profondeur/stencil.

Passez -1 (valeur par défaut) pour ne cibler aucune couche en particulier. Lorsqu’il est défini sur une valeur non négative, la cible de rendu associe une vue qui cible exactement cette couche (tranche) de la texture de profondeur. Cela n’a d’effet que lorsqu’une texture de profondeur sous forme de tableau 2D est fournie via ` setDepthTexture()` ; sinon, la valeur est ignorée.

La valeur doit se situer dans les limites de la taille du tableau de la texture de profondeur ; le passage d’un index hors plage entraîne un comportement indéfini. L’index est absolu par rapport à la texture sous-jacente, indépendamment de toute plage de tableau qui aurait pu être spécifiée lors de la création de la texture.

La spécification d’une fonction depthLayer désactive le rendu en couches/multivue pour l’attachement de profondeur.

Cette fonction a été introduite dans Qt 6.12.

Voir également ` depthLayer()` et ` setDepthTexture()`.

[since 6.8] void QRhiTextureRenderTargetDescription::setDepthResolveTexture(QRhiTexture *tex)

Définit l'tex de la texture de résolution de profondeur (ou de profondeur-stencil).

tex Elle doit être une texture 2D ou un tableau de textures 2D dont le format correspond à celui de la texture définie via ` setDepthTexture()`.

Remarque : la résolution des données de profondeur (ou de profondeur-stencil) ne fonctionne que lorsque la fonctionnalité « QRhi::ResolveDepthStencil » est signalée comme prise en charge lors de l'exécution. La prise en charge de la résolution de profondeur-stencil n'est pas universellement disponible parmi les API graphiques. Les conceptions supposant une disponibilité inconditionnelle de la résolution de profondeur-stencil ne sont donc pas portables et doivent être évitées.

Remarque : limitation supplémentairepropre à OpenGL ES : la définition d’une texture de résolution de profondeur ne fonctionne qu’en combinaison avec ` setDepthTexture()` et non avec ` setDepthStencilBuffer()`.

Cette fonction a été introduite dans Qt 6.8.

Voir également depthResolveTexture(), QRhiColorAttachment::setResolveTexture() et setDepthTexture().

void QRhiTextureRenderTargetDescription::setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)

Définit la valeur « renderBuffer » pour la profondeur-stencil. Ce paramètre n'est pas obligatoire ; par exemple, si aucune fonctionnalité liée au test/à l'écriture de profondeur ou au stencil n'est utilisée dans les pipelines graphiques de l'un des passes de rendu pour cette cible de rendu, il peut rester défini sur « nullptr ».

Remarque : les paramètres depthStencilBuffer() et depthTexture() ne peuvent pas être tous deux définis (ils ne peuvent pas être non nuls en même temps).

L’utilisation d’un « QRhiRenderBuffer » plutôt que d’un « QRhiTexture » 2D comme tampon de profondeur ou de profondeur/stencil est très courante, et constitue l’approche recommandée pour les applications. L'utilisation d'un « QRhiTexture » rend alors l'appel à ` setDepthTexture()` pertinent si les données de profondeur sont destinées à être consultées ultérieurement (par exemple, échantillonnées dans un shader), ou en cas d'multiview rendering (car la texture de profondeur doit alors être un tableau de textures).

Voir également depthStencilBuffer() et setDepthTexture().

void QRhiTextureRenderTargetDescription::setDepthTexture(QRhiTexture *texture)

Définit la valeur « texture » pour la profondeur-stencil. Il s'agit d'une alternative à la fonction ` setDepthStencilBuffer()`, où, au lieu d'un objet ` QRhiRenderBuffer `, on fournit un objet ` QRhiTexture ` de type approprié (par exemple, ` QRhiTexture::D32F`).

Remarque : depthStencilBuffer() et depthTexture() ne peuvent pas être tous deux définis (ils ne peuvent pas être non nuls en même temps).

texture peut être soit une texture 2D, soit un tableau de textures 2D (lorsque les tableaux de textures sont pris en charge). La spécification d’un tableau de textures est particulièrement pertinente avec multiview rendering.

Remarque : si texture est un format comportant une composante stencil, tel que QRhiTexture::D24S8, il servira également de tampon de stencil.

Voir également ` depthTexture()` et ` setDepthStencilBuffer()`.

[since 6.9] void QRhiTextureRenderTargetDescription::setShadingRateMap(QRhiShadingRateMap *map)

S'associe à l'QRhiShadingRateMap spécifiée map. Cette fonctionnalité n'est disponible que lorsque la prise en charge de la fonctionnalité QRhi::VariableRateShadingMap est signalée.

Lorsque la fonction ` QRhiCommandBuffer::setShadingRate()` est également appelée, c'est le plus élevé des deux taux d'ombrage qui est utilisé pour chaque tuile. Il n'existe actuellement aucun moyen de contrôler le comportement du combinateur.

Remarque : lorsque la cible de rendu a déjà été construite (l’appel à `create()` a abouti), la définition d’une carte de taux d’ombrage implique qu’un nouveau ` QRhiRenderPassDescriptor ` est nécessaire et qu’une reconstruction s’impose. Appelez à nouveau setRenderPassDescriptor() (en dehors d’un passage de rendu), puis effectuez une reconstruction en appelant create(). Cela entraîne également d’autres conséquences en cascade, notamment pour les pipelines graphiques : ceux-ci doivent également être associés au nouvel QRhiRenderPassDescriptor, puis reconstruits. Consultez QRhiRenderPassDescriptor::serializedFormat() pour obtenir des suggestions sur la manière de gérer cette situation. N’oubliez pas de définir également le drapeau QRhiGraphicsPipeline::UsesShadingRate.

Cette fonction a été introduite dans Qt 6.9.

Voir également shadingRateMap().

[since 6.9] QRhiShadingRateMap *QRhiTextureRenderTargetDescription::shadingRateMap() const

Renvoie la valeur actuellement définie pour ` QRhiShadingRateMap`. Par défaut, cette valeur est ` nullptr`.

Cette fonction a été introduite dans Qt 6.9.

Voir également setShadingRateMap().

© 2026 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.