QRhiShaderResourceBindings Class
Regroupe les ressources permettant de rendre les ressources de tampon, de texture et d'échantillonneur accessibles aux shaders. 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 |
Fonctions publiques
| const QRhiShaderResourceBinding * | bindingAt(qsizetype index) const |
| qsizetype | bindingCount() const |
| const QRhiShaderResourceBinding * | cbeginBindings() const |
| const QRhiShaderResourceBinding * | cendBindings() const |
| virtual bool | create() = 0 |
| bool | isLayoutCompatible(const QRhiShaderResourceBindings *other) const |
| QVector<quint32> | serializedLayoutDescription() const |
| void | setBindings(std::initializer_list<QRhiShaderResourceBinding> list) |
| void | setBindings(InputIterator first, InputIterator last) |
Fonctions publiques réimplémentées
| virtual QRhiResource::Type | resourceType() const override |
Description détaillée
Un objet QRhiShaderResourceBindings est un ensemble d'objets ` QRhiShaderResourceBinding `, dont chacun décrit une liaison unique.
Prenons un shader de fragment présentant l’interface suivante :
layout(std140, binding = 0) uniform buf {
mat4 mvp;
int flip;
} ubuf;
layout(binding = 1) uniform sampler2D tex;Pour rendre les ressources visibles par le shader, on peut créer les QRhiShaderResourceBindings suivants, puis les transmettre à la fonction QRhiGraphicsPipeline::setShaderResourceBindings() :
QRhiShaderResourceBindings *srb = rhi->newShaderResourceBindings();
srb->setBindings({
QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, ubuf),
QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture, sampler)
});
srb->create();
// ...
QRhiGraphicsPipeline *ps = rhi->newGraphicsPipeline();
// ...
ps->setShaderResourceBindings(srb);
ps->create();
// ...
cb->setGraphicsPipeline(ps);
cb->setShaderResources(); // binds srbCela suppose qu’ ubuf est un QRhiBuffer, que texture est un QRhiTexture, et que sampler est un QRhiSampler. L’exemple suppose également que le bloc uniform est présent dans le shader de sommets, de sorte que le même tampon soit également rendu visible à l’étape des sommets.
Utilisation avancée
En nous appuyant sur l’exemple ci-dessus, supposons qu’un passage doive désormais utiliser exactement le même pipeline et les mêmes shaders avec une texture différente. Créer une ressource de shader entièrement distincte ( QRhiGraphicsPipeline ) uniquement pour cela serait excessif. C’est pourquoi la fonction QRhiCommandBuffer::setShaderResources() permet de spécifier un argument srb. Tant que les configurations (c’est-à-dire le nombre de liaisons et les points de liaison) correspondent entre deux QRhiShaderResourceBindings, celles-ci peuvent toutes deux être utilisées avec le même pipeline, à condition que ce dernier ait été créé à l’origine avec l’une d’entre elles. Voir isLayoutCompatible() pour plus de détails.
QRhiShaderResourceBindings *srb2 = rhi->newShaderResourceBindings();
// ...
cb->setGraphicsPipeline(ps);
cb->setShaderResources(srb2); // binds srb2Remarque : il s’agit d’une API RHI dont la compatibilité n’est pas entièrement garantie ; consultez QRhi pour plus de détails.
Documentation des fonctions membres
const QRhiShaderResourceBinding *QRhiShaderResourceBindings::bindingAt(qsizetype index) const
Renvoie la liaison à l'index spécifiée.
qsizetype QRhiShaderResourceBindings::bindingCount() const
Renvoie le nombre de liaisons.
const QRhiShaderResourceBinding *QRhiShaderResourceBindings::cbeginBindings() const
Renvoie un itérateur constant pointant vers le premier élément de la liste de liaison.
const QRhiShaderResourceBinding *QRhiShaderResourceBindings::cendBindings() const
Renvoie un itérateur constant pointant juste après le dernier élément de la liste de liaison.
[pure virtual] bool QRhiShaderResourceBindings::create()
Crée l'ensemble de liaisons de ressources correspondant. En fonction de l'API graphique sous-jacente, cela peut impliquer la création de ressources graphiques natives ; il ne faut donc pas considérer qu'il s'agit d'une opération peu coûteuse.
Si la fonction create() a déjà été appelée sans qu’une fonction destroy() correspondante ait été appelée, la fonction destroy() est alors appelée implicitement en premier lieu.
Renvoie ` true ` en cas de succès, et ` false ` en cas d’échec. Quelle que soit la valeur renvoyée, l’appel à ` destroy()` est toujours sans risque.
bool QRhiShaderResourceBindings::isLayoutCompatible(const QRhiShaderResourceBindings *other) const
Renvoie true si la disposition est compatible avec other. La disposition n’inclut pas la ressource proprement dite (telle qu’un tampon ou une texture) ni les paramètres associés (tels que le décalage ou la taille). Elle inclut toutefois le point de liaison, l’étape du pipeline et le type de ressource. Le nombre et l’ordre des liaisons doivent également correspondre pour que la compatibilité soit assurée.
Lorsqu’un QRhiGraphicsPipeline a été créé à l’aide de cette QRhiShaderResourceBindings et que la fonction renvoie true, other peut alors être transmis en toute sécurité à QRhiCommandBuffer::setShaderResources(), et ainsi être utilisé avec le pipeline à la place de cette QRhiShaderResourceBindings.
Remarque : cette fonction ne doit être appelée qu’après un appel réussi à create(), car elle s’appuie sur des données générées lors de la « cuisson » des structures de données sous-jacentes. De cette manière, la fonction peut mettre en œuvre une approche de comparaison plus efficace que de parcourir deux listes liées et d’appeler QRhiShaderResourceBinding::isLayoutCompatible() sur chaque paire. Cela devient particulièrement pertinent lorsque cette fonction est appelée à une fréquence élevée.
Voir également serializedLayoutDescription().
[override virtual] QRhiResource::Type QRhiShaderResourceBindings::resourceType() const
Réimplémente : ` QRhiResource::resourceType()` const.
Renvoie le type de ressource.
QVector<quint32> QRhiShaderResourceBindings::serializedLayoutDescription() const
Renvoie un vecteur d'entiers contenant un blob opaque décrivant la structure de la liste de liaisons, c'est-à-dire les données pertinentes pour layout compatibility tests.
Étant donnés deux objets srb1 et srb2, si les données renvoyées par cette fonction sont identiques, alors srb1->isLayoutCompatible(srb2), et inversement, sont également valables.
Remarque : les données renvoyées sont destinées à être stockées en mémoire et à servir de base à des comparaisons pendant la durée de vie de l’ QRhi à laquelle l’objet appartient. Elles ne sont pas destinées à être stockées sur disque, réutilisées entre processus, ni utilisées avec plusieurs instances de QRhi pouvant avoir des backends différents.
Voir également isLayoutCompatible().
void QRhiShaderResourceBindings::setBindings(std::initializer_list<QRhiShaderResourceBinding> list)
Définit l'list e des liaisons.
template <typename InputIterator> void QRhiShaderResourceBindings::setBindings(InputIterator first, InputIterator last)
Définit la liste des liaisons à partir des itérateurs first et last.
© 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.