QRhiRenderPassDescriptor Class
Rendu de la ressource pass. 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érite : | QRhiResource |
Fonctions publiques
| virtual bool | isCompatible(const QRhiRenderPassDescriptor *other) const = 0 |
| virtual const QRhiNativeHandles * | nativeHandles() |
| virtual QRhiRenderPassDescriptor * | newCompatibleRenderPassDescriptor() const = 0 |
| virtual QVector<quint32> | serializedFormat() const = 0 |
Fonctions publiques réimplémentées
| virtual QRhiResource::Type | resourceType() const override |
Description détaillée
Une passe de rendu, si un tel concept existe dans l'API graphique sous-jacente, est une collection de pièces jointes (couleur, profondeur, pochoir) et décrit comment ces pièces jointes sont utilisées.
Remarque : il s'agit d'une API RHI avec des garanties de compatibilité limitées, voir QRhi pour plus de détails.
Documentation des fonctions membres
[pure virtual] bool QRhiRenderPassDescriptor::isCompatible(const QRhiRenderPassDescriptor *other) const
Retourne vrai si le other QRhiRenderPassDescriptor est compatible avec celui-ci, ce qui signifie que this et other peuvent être utilisés de manière interchangeable dans QRhiGraphicsPipeline::setRenderPassDescriptor().
Le concept de compatibilité des descripteurs de passage de rendu est similaire à celui de layout compatibility pour les instances de QRhiShaderResourceBindings. Ils permettent une meilleure réutilisation des instances QRhiGraphicsPipeline: par exemple, un cache d'instance QRhiGraphicsPipeline est censé utiliser ces fonctions pour rechercher un pipeline correspondant, au lieu de simplement comparer des pointeurs, ce qui permet d'utiliser différents QRhiRenderPassDescriptor et QRhiShaderResourceBindings en combinaison avec le pipeline, pour autant qu'ils soient compatibles.
Les détails exacts de la compatibilité dépendent de l'API graphique sous-jacente. Deux descripteurs de passage de rendu created provenant du même QRhiTextureRenderTarget sont toujours compatibles.
Comme pour QRhiShaderResourceBindings, la compatibilité peut également être testée sans disposer de deux objets existants. L'extraction du blob opaque en appelant serializedFormat() permet de tester la compatibilité en comparant le vecteur retourné à celui d'un autre QRhiRenderPassDescriptor's serializedFormat(). Cela présente des avantages dans certaines situations, car cela permet de tester la compatibilité d'un QRhiRenderPassDescriptor avec un QRhiGraphicsPipeline même lorsque le QRhiRenderPassDescriptor sur lequel le pipeline a été construit à l'origine n'est plus disponible (mais que les données renvoyées par son serializedFormat() le sont toujours).
Voir aussi newCompatibleRenderPassDescriptor() et serializedFormat().
[virtual] const QRhiNativeHandles *QRhiRenderPassDescriptor::nativeHandles()
Renvoie un pointeur vers une sous-classe QRhiNativeHandles spécifique au backend, telle que QRhiVulkanRenderPassNativeHandles. La valeur renvoyée est nullptr lorsque l'exposition des ressources natives sous-jacentes n'est pas prise en charge par le backend.
Voir également QRhiVulkanRenderPassNativeHandles.
[pure virtual] QRhiRenderPassDescriptor *QRhiRenderPassDescriptor::newCompatibleRenderPassDescriptor() const
Renvoie un nouvel objet QRhiRenderPassDescriptor qui est compatible avec celui-ci.
Cette fonction permet de cloner un objet QRhiRenderPassDescriptor. L'objet retourné est prêt à être utilisé et la propriété est transférée à l'appelant. Le clonage d'un objet QRhiRenderPassDescriptor peut s'avérer utile dans les situations où l'objet est stocké dans des structures de données liées aux pipelines graphiques (afin de permettre la création de nouveaux pipelines qui, à leur tour, nécessitent un objet descripteur de passage de rendu), et où la durée de vie du descripteur de passage de rendu créé à partir d'une cible de rendu peut être plus courte que celle des pipelines. (Dans une telle situation, il peut être avantageux de stocker une version clonée dans les structures de données, ce qui permet également de transférer la propriété.
Voir également isCompatible().
[override virtual] QRhiResource::Type QRhiRenderPassDescriptor::resourceType() const
Réimplémente : QRhiResource::resourceType() const.
Renvoie le type de ressource.
[pure virtual] QVector<quint32> QRhiRenderPassDescriptor::serializedFormat() const
Renvoie un vecteur d'entiers contenant un blob opaque décrivant les données pertinentes pour compatibility.
Étant donné deux objets QRhiRenderPassDescriptor rp1 et rp2, si les données renvoyées par cette fonction sont identiques, alors rp1->isCompatible(rp2), et vice versa, le sont également.
Remarque : les données renvoyées sont destinées à être stockées en mémoire et à faire l'objet de comparaisons pendant la durée de vie du site QRhi auquel l'objet appartient. Elles ne sont pas destinées à être stockées sur disque, à être réutilisées entre processus ou à être utilisées avec plusieurs instances de QRhi avec des backends potentiellement différents.
Remarque : l'appel à cette fonction est censé être une opération peu coûteuse puisque les backends ne sont pas censés calculer les données dans cette fonction, mais plutôt renvoyer une série de données déjà calculées.
Lors de la création de composants réutilisables dans le cadre d'une bibliothèque, où les pipelines graphiques sont créés et maintenus tout en ciblant une QRhiRenderTarget (qu'il s'agisse d'une chaîne d'échange ou d'une texture) gérée par le client de la bibliothèque, les composants doivent être en mesure de gérer une QRhiRenderPassDescriptor changeante. Par exemple, parce que la cible de rendu change et invalide ainsi l'ancienne QRhiRenderPassDescriptor (du moins en ce qui concerne la nouvelle cible de rendu) en raison d'un format de couleur et de pièces jointes potentiellement différents. Ou parce que variable rate shading est utilisé de manière dynamique. Un modèle simple qui aide à résoudre ce problème consiste à effectuer la vérification suivante à chaque image, afin de reconnaître le cas où le pipeline doit être associé à un nouveau QRhiRenderPassDescriptor, parce que quelque chose est différent à propos de la cible de rendu maintenant, par rapport aux images précédentes :
QRhiRenderPassDescriptor *rp = m_renderTarget->renderPassDescriptor(); if (m_pipeline && rp->serializedFormat() != m_renderPassFormat) { m_pipeline->setRenderPassDescriptor(rp); m_renderPassFormat = rp->serializedFormat(); m_pipeline->create(); } // remember to store m_renderPassFormat also when creating m_pipeline the first time
Voir également isCompatible().
© 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.