Sur cette page

QRhiRenderBuffer Class

Ressource de tampon 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
Hérite de : QRhiResource

Types publics

struct NativeRenderBuffer
enum Flag { UsedWithSwapChainOnly }
flags Flags
enum Type { DepthStencil, Color }

Fonctions publiques

virtual bool create() = 0
virtual bool createFrom(QRhiRenderBuffer::NativeRenderBuffer src)
QRhiRenderBuffer::Flags flags() const
QSize pixelSize() const
int sampleCount() const
void setFlags(QRhiRenderBuffer::Flags f)
void setPixelSize(const QSize &sz)
void setSampleCount(int s)
void setType(QRhiRenderBuffer::Type t)
QRhiRenderBuffer::Type type() const

Fonctions publiques réimplémentées

virtual QRhiResource::Type resourceType() const override

Description détaillée

Les tampons de rendu ne peuvent pas être échantillonnés ni lus, mais présentent certains avantages par rapport aux textures dans certains cas :

Un tampon de rendu « DepthStencil » peut être alloué de manière différée et s’appuyer sur de la mémoire transitoire avec certaines API. Sur certaines plateformes, cela peut signifier que le tampon de profondeur/stencil n’utilise aucun support physique.

Cette nature transitoire a une conséquence : il n’est pas garanti que le contenu d’un tampon de rendu « DepthStencil » soit conservé si un backend doit interrompre et redémarrer un passage de rendu en interne. Avec Metal, cela se produit lorsqu’un appel de dessin est implémenté via des tampons de commande indirects, ce qui est le cas pour une fonction ` drawIndexedIndirect()` avec un nombre élevé de dessins, ainsi que lorsque la tessellation est utilisée. Les dessins enregistrés après un tel appel sont alors soumis à un test de profondeur par rapport à un tampon de profondeur qui a perdu son contenu. Lorsque cela pose problème, associez un tampon de profondeur ou un tampon de profondeur-stencil QRhiTexture à l’aide de ` setDepthTexture()` () au lieu d’un tampon de rendu : celui-ci est conservé lors d’une interruption, sauf si ` QRhiTextureRenderTarget::DoNotStoreDepthStencilContents ` est défini.

Color Les tampons de rendu sont utiles car la fonction « QRhi::MultisampleRenderBuffer » peut être prise en charge même lorsque la fonction « QRhi::MultisampleTexture » ne l’est pas.

La manière dont le tampon de rendu est implémenté par un backend n’est pas exposée aux applications. Dans certains cas, il peut s’appuyer sur des textures ordinaires, tandis que dans d’autres, un autre type de ressource native peut être utilisé.

Les tampons de rendu utilisés (et uniquement utilisés) comme tampons de profondeur-stencil en combinaison avec les tampons de couleur d’un « QRhiSwapChain » doivent voir le drapeau « UsedWithSwapChainOnly » activé. Cela répond à un double objectif : d’une part, ces tampons, selon le backend et les API sous-jacentes, sont plus efficaces ; d’autre part, l’option « QRhi » assure un redimensionnement automatique pour s’adapter aux tampons de couleur, ce qui signifie qu’il n’est pas nécessaire d’appeler les fonctions ` setPixelSize()` et ` create()` pour ces tampons de rendu.

Remarque : il s’agit d’une API RHI dont la compatibilité est garantie de manière limitée ; pour plus de détails, consultez QRhi.

Documentation sur les types de membres

enum QRhiRenderBuffer::Flag
flags QRhiRenderBuffer::Flags

Valeurs des indicateurs pour flags() et setFlags()

ConstanteValeurDescription
QRhiRenderBuffer::UsedWithSwapChainOnly1 << 0Pour les buffer de rendu de type ` DepthStencil `, cela indique que le buffer de rendu n’est utilisé qu’en combinaison avec un ` QRhiSwapChain`, et jamais d’aucune autre manière. Cela permet un redimensionnement automatique et une reconstruction automatique des ressources ; il n’est donc pas nécessaire d’appeler ` setPixelSize()` ou ` create()` lorsque ce drapeau est activé. Cette valeur de drapeau peut également déclencher un comportement spécifique au backend. Par exemple, avec OpenGL, où une API d’interface de système de fenêtrage distincte est utilisée (EGL, GLX, etc.), ce drapeau est particulièrement important car il évite la création d’une ressource de tampon de rendu proprement dite, puisqu’un tampon de profondeur/stencil est déjà fourni par le système de fenêtrage, comme demandé par ` QSurfaceFormat`.

Le type Flags est un typedef de QFlags<Flag>. Il stocke une combinaison OR de valeurs Flag.

enum QRhiRenderBuffer::Type

Spécifie le type du tampon de rendu

ConstanteValeurDescription
QRhiRenderBuffer::DepthStencil0Profondeur/stencil combinés
QRhiRenderBuffer::Color1Couleur

Documentation des fonctions membres

[pure virtual] bool QRhiRenderBuffer::create()

Crée les ressources graphiques natives correspondantes. Si des ressources existent déjà à la suite d’un appel antérieur à `create()` sans ` destroy()` correspondant, alors la fonction ` destroy()` est d’abord appelée implicitement.

Renvoie ` true ` en cas de succès, et ` false ` lorsqu’une opération graphique a échoué. Quelle que soit la valeur renvoyée, l’appel à ` destroy()` est toujours sans risque.

[virtual] bool QRhiRenderBuffer::createFrom(QRhiRenderBuffer::NativeRenderBuffer src)

Similaire à create() à la différence près qu'aucun nouvel objet « renderbuffer » natif n'est créé. À la place, l'objet « renderbuffer » natif spécifié par src est utilisé.

Cela permet d’importer un objet de tampon de rendu existant (qui doit appartenir au même périphérique ou au même contexte de partage, selon l’API graphique) depuis un moteur graphique externe.

Remarque : cette fonctionnalité n’est actuellement disponible que pour OpenGL. Cette fonction existe uniquement pour permettre l’importation d’un objet « renderbuffer » lié à un objet externe spécifique, tel qu’un EGLImageKHR. Une fois que l’application a appelé la fonction glEGLImageTargetRenderbufferStorageOES, l’objet « renderbuffer » peut être transmis à cette fonction afin de créer un objet « wrapping » de type QRhiRenderBuffer, qui peut à son tour être transmis en tant qu’attachement de couleur à une fonction QRhiTextureRenderTarget pour permettre le rendu vers l’EGLImage.

Remarque : les fonctions pixelSize(), sampleCount() et flags() doivent tout de même être définies correctement. Transmettre des tailles ou d’autres valeurs incorrectes à QRhi::newRenderBuffer(), puis enchaîner avec un appel à createFrom() en espérant que l’objet tampon de rendu natif suffise à lui seul à déduire ces valeurs est une erreur qui entraînera des problèmes.

Remarque : la fonction ` QRhiRenderBuffer ` ne prend pas possession de l’objet natif, et ` destroy()` ne libérera pas cet objet.

Remarque : cette fonction n'est implémentée que lorsque la fonctionnalité QRhi::RenderBufferImport est signalée comme supported. Sinon, la fonction ne fait rien et la valeur de retour est false.

Renvoie « true » en cas de succès, « false » si la fonctionnalité n’est pas prise en charge.

QRhiRenderBuffer::Flags QRhiRenderBuffer::flags() const

Renvoie les indicateurs.

Voir aussi setFlags().

QSize QRhiRenderBuffer::pixelSize() const

Renvoie la taille en pixels.

Voir aussi setPixelSize().

[override virtual] QRhiResource::Type QRhiRenderBuffer::resourceType() const

Réimplémente : ` QRhiResource::resourceType()` const.

Renvoie le type de ressource.

int QRhiRenderBuffer::sampleCount() const

Renvoie le nombre d'échantillons. La valeur 1 indique l'absence d'anticrénelage par échantillonnage multiple.

Voir également la fonction ` setSampleCount()`.

void QRhiRenderBuffer::setFlags(QRhiRenderBuffer::Flags f)

Définit les indicateurs sur « f ».

Voir aussi flags().

void QRhiRenderBuffer::setPixelSize(const QSize &sz)

Définit la taille (en pixels) sur sz.

Voir aussi pixelSize().

void QRhiRenderBuffer::setSampleCount(int s)

Définit le nombre d'échantillons sur s.

Voir aussi sampleCount().

void QRhiRenderBuffer::setType(QRhiRenderBuffer::Type t)

Définit le type sur « t ».

Voir aussi type().

QRhiRenderBuffer::Type QRhiRenderBuffer::type() const

Renvoie le type du tampon de rendu.

Voir également la fonction setType().

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