Sur cette page

QRhiResource Class

Classe de base pour les classes encapsulant des objets de ressources natives. Plus d'informations...

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érité par :
12 types

QRhiBuffer QRhiCommandBuffer, , , , , , , , , , et QRhiComputePipeline QRhiGraphicsPipeline QRhiRenderBuffer QRhiRenderPassDescriptor QRhiRenderTarget QRhiSampler QRhiShaderResourceBindings QRhiShadingRateMap QRhiSwapChain QRhiTexture

Types publics

enum Type { Buffer, Texture, Sampler, RenderBuffer, RenderPassDescriptor, …, ShadingRateMap }

Fonctions publiques

virtual ~QRhiResource()
void deleteLater()
virtual void destroy() = 0
quint64 globalResourceId() const
QByteArray name() const
virtual QRhiResource::Type resourceType() const = 0
QRhi *rhi() const
void setName(const QByteArray &name)

Description détaillée

Remarque : il s'agit d'une API RHI avec des garanties de compatibilité limitées, voir QRhi pour plus de détails.

Documentation sur les types de membres

enum QRhiResource::Type

Spécifie le type de la ressource.

ConstanteValeur
QRhiResource::Buffer0
QRhiResource::Texture1
QRhiResource::Sampler2
QRhiResource::RenderBuffer3
QRhiResource::RenderPassDescriptor4
QRhiResource::SwapChainRenderTarget5
QRhiResource::TextureRenderTarget6
QRhiResource::ShaderResourceBindings7
QRhiResource::GraphicsPipeline8
QRhiResource::SwapChain9
QRhiResource::ComputePipeline10
QRhiResource::CommandBuffer11
QRhiResource::ShadingRateMap12

Fonction membre Documentation

[virtual noexcept] QRhiResource::~QRhiResource()

Destructeur.

Libère (ou demande une libération différée) les ressources graphiques natives sous-jacentes, s'il y en a.

Remarque : les ressources référencées par les commandes pour le cadre actuel ne doivent pas être libérées avant que le cadre ne soit soumis par QRhi::endFrame().

Voir également destroy().

void QRhiResource::deleteLater()

Lorsqu'elle est appelée sans qu'une image soit enregistrée, cette fonction équivaut à la suppression de l'objet. Cependant, entre QRhi::beginFrame() et QRhi::endFrame(), le comportement est différent : l'objet QRhiResource ne sera pas détruit tant que la trame n'aura pas été soumise via QRhi::endFrame(), ce qui répond à l'exigence QRhi de ne pas modifier les objets QRhiResource qui sont référencés par la trame en cours d'enregistrement.

Si le QRhi qui a créé cet objet est déjà détruit, l'objet est supprimé immédiatement.

L'utilisation de deleteLater() peut s'avérer utile dans de nombreux cas et complète la garantie de bas niveau (que les objets graphiques natifs sous-jacents ne sont jamais détruits tant qu'il n'est pas sûr de le faire et que l'on ne sait pas avec certitude qu'ils ne sont pas utilisés par le GPU dans une image encore en vol), en offrant un moyen de s'assurer que les instances d'objets C++ (de QRhiBuffer, QRhiTexture, etc.) restent elles aussi valides jusqu'à la fin de l'image en cours.

L'exemple suivant montre un moyen pratique de créer un tampon jetable qui n'est utilisé que dans une seule image et qui est automatiquement libéré dans endFrame(). (en ce qui concerne le(s) tampon(s) natif(s) sous-jacent(s), la garantie habituelle s'applique : le backend QRhi reporte la libération de ces tampons jusqu'à ce qu'il soit garanti que la frame dans laquelle le tampon est accédé par le GPU est terminée).

rhi->beginFrame(swapchain);
QRhiBuffer *buf = rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, 256);
buf->deleteLater(); // !
u = rhi->nextResourceUpdateBatch();
u->uploadStaticBuffer(buf, data);
// ... draw with buf
rhi->endFrame();

Voir également destroy().

[pure virtual] void QRhiResource::destroy()

Libère (ou demande une libération différée) les ressources graphiques natives sous-jacentes. Il est possible de l'appeler plusieurs fois sans risque, mais les invocations suivantes seront alors sans effet.

Une fois que destroy() est appelé, l'instance QRhiResource peut être réutilisée en appelant à nouveau create(). Cela entraînera la création de nouvelles ressources graphiques natives en dessous.

Remarque : les ressources référencées par des commandes pour le cadre actuel ne doivent pas être libérées avant que le cadre ne soit soumis par QRhi::endFrame().

Le destructeur QRhiResource effectue la même tâche, il n'est donc pas nécessaire d'appeler cette fonction avant de supprimer une ressource QRhiResource.

Voir également deleteLater().

quint64 QRhiResource::globalResourceId() const

Renvoie l'identifiant global et unique de ce site QRhiResource.

Le code utilisateur a rarement besoin de traiter cette valeur directement. Elle est utilisée en interne à des fins de suivi et de comptabilité.

QByteArray QRhiResource::name() const

Renvoie le nom de l'objet actuellement défini. Par défaut, le nom est vide.

Voir aussi setName().

[pure virtual] QRhiResource::Type QRhiResource::resourceType() const

Renvoie le type de la ressource.

QRhi *QRhiResource::rhi() const

Renvoie l'adresse QRhi qui a créé cette ressource.

Si le QRhi qui a créé cet objet est déjà détruit, le résultat est nullptr.

void QRhiResource::setName(const QByteArray &name)

Définit une adresse name pour l'objet.

Cela permet d'obtenir des noms descriptifs pour les ressources graphiques natives visibles dans les outils de débogage graphique, tels que RenderDoc et XCode.

Lorsqu'il s'agit de nommer des objets natifs en relayant le nom via l'API graphique appropriée, notez que le nom est ignoré lorsque QRhi::DebugMarkers n'est pas pris en charge et peut, en fonction du backend, être également ignoré lorsque QRhi::EnableDebugMarkers n'est pas défini.

Note : Le nom peut être ignoré pour les objets autres que les tampons, les renderbuffers et les textures, en fonction du backend.

Note : Le nom peut être modifié. Pour les ressources à créneaux, telles qu'un QRhiBuffer soutenu par plusieurs tampons natifs, QRhi ajoutera un suffixe pour que les tampons natifs sous-jacents soient facilement distinguables les uns des autres.

Voir aussi name().

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