QRhiShaderResourceBinding Class
Décrit la ressource de nuanceur pour un seul point de liaison. 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 |
Types publics
| enum | StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage } |
| flags | StageFlags |
| enum | Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore } |
Fonctions publiques
| bool | isLayoutCompatible(const QRhiShaderResourceBinding &other) const |
Membres publics statiques
| QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler) |
| QRhiShaderResourceBinding | sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers) |
| QRhiShaderResourceBinding | sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler) |
| QRhiShaderResourceBinding | texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex) |
| QRhiShaderResourceBinding | textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex) |
| QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size) |
Non-membres apparentés
| size_t | qHash(const QRhiShaderResourceBinding &key, size_t seed = 0) |
| bool | operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
| bool | operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
Description détaillée
Un QRhiShaderResourceBinding ne peut pas être construit directement. Utilisez plutôt les fonctions statiques telles que uniformBuffer() ou sampledTexture() pour obtenir une instance.
Remarque : il s'agit d'une API RHI avec des garanties de compatibilité limitées, voir QRhi pour plus de détails.
Documentation des types de membres
enum QRhiShaderResourceBinding::StageFlag
flags QRhiShaderResourceBinding::StageFlags
Valeurs des drapeaux indiquant les étapes dans lesquelles la ressource de nuanceur est visible.
| Constante | Valeur | Description |
|---|---|---|
QRhiShaderResourceBinding::VertexStage | 1 << 0 | Stade du sommet |
QRhiShaderResourceBinding::TessellationControlStage | 1 << 1 | Étape de contrôle de la tessellation (nuanceur de coque) |
QRhiShaderResourceBinding::TessellationEvaluationStage | 1 << 2 | Phase d'évaluation de la tessellation (nuanceur de domaine) |
QRhiShaderResourceBinding::FragmentStage | 1 << 4 | Phase de fragmentation (nuanceur de pixels) |
QRhiShaderResourceBinding::ComputeStage | 1 << 5 | Étape de calcul |
QRhiShaderResourceBinding::GeometryStage | 1 << 3 | Étape de géométrie |
Le type StageFlags est un typedef pour QFlags<StageFlag>. Il stocke une combinaison OU de valeurs StageFlag.
enum QRhiShaderResourceBinding::Type
Spécifie le type de la ressource de nuanceur liée à un point de liaison
| Constante | Valeur | Description de la ressource |
|---|---|---|
QRhiShaderResourceBinding::UniformBuffer | 0 | Tampon uniforme |
QRhiShaderResourceBinding::SampledTexture | 1 | Échantillonneur d'images combiné (une paire texture/échantillonneur). Même lorsque le langage d'ombrage associé à l'API 3D sous-jacente ne prend pas en charge ce concept (par exemple D3D et HLSL), il est toujours pris en charge car la couche de traduction des shaders se charge de la traduction et du remappage appropriés des points de liaison ou des registres de shaders. |
QRhiShaderResourceBinding::Texture | 2 | Texture (séparée) |
QRhiShaderResourceBinding::Sampler | 3 | Échantillonneur (séparé) |
QRhiShaderResourceBinding::ImageLoad | 4 | Chargement d'image (avec GLSL, cela revient à faire imageLoad() sur un seul niveau - et sur une ou toutes les couches - d'une texture exposée au shader en tant qu'objet image). |
QRhiShaderResourceBinding::ImageStore | 5 | Stockage d'image (avec GLSL, cela revient à faire imageStore() ou imageAtomic*() sur un seul niveau - et une ou toutes les couches - d'une texture exposée au shader en tant qu'objet image) |
QRhiShaderResourceBinding::ImageLoadStore | 6 | Chargement et stockage d'images |
QRhiShaderResourceBinding::BufferLoad | 7 | Chargement d'un tampon de stockage (avec GLSL, cela correspond à la lecture d'un tampon de stockage du nuanceur) |
QRhiShaderResourceBinding::BufferStore | 8 | Stockage d'un tampon de stockage (avec GLSL, cela correspond à l'écriture dans un tampon de stockage du shader) |
QRhiShaderResourceBinding::BufferLoadStore | 9 | Chargement et stockage d'un tampon de stockage |
Documentation des fonctions membres
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Renvoie un lien de ressource de shader pour un tampon de stockage en lecture seule avec le numéro binding et le pipeline stage.
Note : Lorsque buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::StorageBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Note : La disponibilité de la fonction Buffer load/store n'est garantie qu'au sein d'un pipeline de calcul. Bien que certains backends puissent supporter l'utilisation de ces ressources dans un pipeline graphique, cela n'est pas universellement supporté, et même lorsque c'est le cas, des problèmes inattendus peuvent survenir en ce qui concerne les barrières et la synchronisation. Par conséquent, évitez d'utiliser ces ressources avec des nuanceurs autres que de calcul.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Renvoie une liaison de ressource de shader pour un tampon de stockage en lecture seule avec le numéro binding et le pipeline stage. Cette surcharge lie uniquement une région, comme spécifié par offset et size.
Remarque : si buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::StorageBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Note : La disponibilité de la fonction Buffer load/store n'est garantie qu'au sein d'un pipeline de calcul. Bien que certains backends puissent supporter l'utilisation de ces ressources dans un pipeline graphique, cela n'est pas universellement supporté, et même lorsque c'est le cas, des problèmes inattendus peuvent survenir en ce qui concerne les barrières et la synchronisation. Par conséquent, évitez d'utiliser ces ressources avec des nuanceurs autres que de calcul.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Renvoie une liaison de ressource de shader pour un tampon de stockage en lecture-écriture avec le numéro binding et le pipeline stage.
Note : Lorsque buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::StorageBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Note : La disponibilité de la fonction Buffer load/store n'est garantie qu'au sein d'un pipeline de calcul. Bien que certains backends puissent supporter l'utilisation de ces ressources dans un pipeline graphique, cela n'est pas universellement supporté, et même lorsque c'est le cas, des problèmes inattendus peuvent survenir en ce qui concerne les barrières et la synchronisation. Par conséquent, évitez d'utiliser ces ressources avec des nuanceurs autres que de calcul.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Renvoie une liaison de ressource de shader pour un tampon de stockage en lecture-écriture avec le numéro binding et le pipeline stage. Cette surcharge lie uniquement une région, comme spécifié par offset et size.
Remarque : lorsque buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::StorageBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Note : La disponibilité de la fonction Buffer load/store n'est garantie qu'au sein d'un pipeline de calcul. Bien que certains backends puissent supporter l'utilisation de ces ressources dans un pipeline graphique, cela n'est pas universellement supporté, et même lorsque c'est le cas, des problèmes inattendus peuvent survenir en ce qui concerne les barrières et la synchronisation. Par conséquent, évitez d'utiliser ces ressources avec des nuanceurs autres que de calcul.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Renvoie une liaison de ressource de shader pour un tampon de stockage en écriture seule avec le numéro binding et le pipeline stage.
Note : Lorsque buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::StorageBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Note : La disponibilité de la fonction Buffer load/store n'est garantie qu'au sein d'un pipeline de calcul. Bien que certains backends puissent supporter l'utilisation de ces ressources dans un pipeline graphique, cela n'est pas universellement supporté, et même lorsque c'est le cas, des problèmes inattendus peuvent survenir en ce qui concerne les barrières et la synchronisation. Par conséquent, évitez d'utiliser ces ressources avec des nuanceurs autres que de calcul.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Renvoie une liaison de ressource de shader pour un tampon de stockage en écriture seule avec le numéro binding et le pipeline stage. Cette surcharge lie uniquement une région, comme spécifié par offset et size.
Remarque : si buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::StorageBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Note : La disponibilité de la fonction Buffer load/store n'est garantie qu'au sein d'un pipeline de calcul. Bien que certains backends puissent supporter l'utilisation de ces ressources dans un pipeline graphique, cela n'est pas universellement supporté, et même lorsque c'est le cas, des problèmes inattendus peuvent survenir en ce qui concerne les barrières et la synchronisation. Par conséquent, évitez d'utiliser ces ressources avec des nuanceurs autres que de calcul.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
Renvoie une liaison de ressource de shader pour une image de stockage en lecture seule avec le numéro binding et le pipeline stage. Les opérations de chargement de l'image auront accès à toutes les couches de l'image level. (ainsi, si la texture est un cubemap, le shader doit utiliser imageCube au lieu d'image2D).
Note : Lorsque tex n'est pas nul, il doit avoir été créé avec QRhiTexture::UsedWithLoadStore.
Remarque : tex peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : le chargement/stockage d'images n'est disponible qu'aux stades du calcul et de la fragmentation.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
Renvoie une liaison de ressource de shader pour une image de stockage en lecture/écriture avec le numéro binding et le pipeline stage. Les opérations de chargement/stockage de l'image auront accès à toutes les couches de l'image level spécifiée (ainsi, si la texture est un cubemap, le shader doit utiliser imageCube au lieu d'image2D).
Note : Lorsque tex n'est pas nul, il doit avoir été créé avec QRhiTexture::UsedWithLoadStore.
Remarque : tex peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : le chargement/stockage d'images n'est disponible qu'aux stades du calcul et de la fragmentation.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
Renvoie une liaison de ressource de shader pour une image de stockage en écriture seule avec le numéro binding et le pipeline stage. Les opérations de stockage de l'image auront accès à toutes les couches de l'image level. (ainsi, si la texture est un cubemap, le shader doit utiliser imageCube au lieu d'image2D).
Note : Lorsque tex n'est pas nul, il doit avoir été créé avec QRhiTexture::UsedWithLoadStore.
Remarque : tex peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : le chargement/stockage d'images n'est disponible qu'aux stades du calcul et de la fragmentation.
bool QRhiShaderResourceBinding::isLayoutCompatible(const QRhiShaderResourceBinding &other) const
Renvoie true si la disposition est compatible avec other. La mise en page n'inclut pas la ressource réelle (telle que la mémoire tampon ou la texture) et les paramètres associés (tels que le décalage ou la taille).
Par exemple, a et b ci-dessous ne sont pas égaux, mais sont compatibles du point de vue de la mise en page :
auto a = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buffer); auto b = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, someOtherBuffer, 256);
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler)
Renvoie une liaison de ressources de shaders pour le numéro de liaison, les étapes du pipeline, la texture et l'échantillonneur spécifiés par binding, stage, tex, sampler.
Remarque : cette fonction équivaut à appeler sampledTextures() avec un count égal à 1.
Remarque : tex et sampler peuvent être nuls. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois pour créer des pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre objet QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : il se peut qu'un shader ne puisse pas consommer plus de 16 textures/échantillonneurs, en fonction de l'API graphique sous-jacente. Cette limite doit être gardée à l'esprit lors de la conception du moteur de rendu. Cela ne s'applique pas aux tableaux de textures qui consomment un seul point de liaison (registre de shader) et peuvent contenir de 256 à 2048 textures, en fonction de l'API graphique sous-jacente. Les tableaux de textures (voir sampledTextures()) ne sont cependant pas différents à cet égard de l'utilisation du même nombre de textures individuelles.
Voir également sampledTextures().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers)
Renvoie un lien de ressource de shader pour le numéro de lien donné, les étapes du pipeline et le tableau de paires d'échantillonneurs de texture spécifié par binding, stage, count, et texSamplers.
Remarque : count doit être au moins égal à 1 et ne doit pas dépasser 16.
Remarque : lorsque count vaut 1, cette fonction est équivalente à sampledTexture().
Cette fonction est utile lorsqu'il s'agit de tableaux d'échantillonneurs d'images combinés. Par exemple, en GLSL, layout(binding = 5) uniform sampler2D shadowMaps[8]; déclare un tableau d'échantillonneurs d'images combinés. L'application est alors censée fournir un QRhiShaderResourceBinding pour le point de liaison 5, configuré en appelant cette fonction avec count fixé à 8 et une texture et un échantillonneur valides pour chaque élément du tableau.
Attention : Tous les éléments du tableau doivent être spécifiés. Dans l'exemple ci-dessus, la seule approche valide et portable consiste à appeler cette fonction avec une valeur count de 8. En outre, toutes les instances QRhiTexture et QRhiSampler doivent être valides, ce qui signifie que nullptr n'est pas une valeur acceptée. Cela est dû à certaines API sous-jacentes, telles que Vulkan, qui nécessitent une image et un objet d'échantillonnage valides pour chaque élément des tableaux de descripteurs. Il est conseillé aux applications de fournir des échantillonneurs et des textures "factices" si certains éléments du tableau ne sont pas pertinents (parce qu'ils ne sont pas accessibles dans le shader).
Remarque : texSamplers peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois pour créer des pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Voir aussi sampledTexture().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)
Renvoie une liaison de ressources de shaders pour le numéro de liaison, les étapes du pipeline et l'échantillonneur spécifiés par binding, stage, sampler.
Remarque : sampler peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Les tableaux d'échantillonneurs distincts ne sont pas pris en charge.
Cela crée une liaison pour un objet d'échantillonneur séparé, alors que sampledTexture() convient aux échantillonneurs d'images combinés. Dans le code GLSL compatible avec Vulkan, les échantillonneurs séparés sont déclarés en tant que sampler et non sampler2D: layout(binding = 2) uniform sampler samp;
Si les objets texture2D et sampler sont présents, ils peuvent être utilisés ensemble pour échantillonner la texture : fragColor = texture(sampler2D(tex, samp), texcoord);.
Remarque : il se peut qu'un nuanceur ne puisse pas utiliser plus de 16 échantillonneurs, en fonction de l'API graphique sous-jacente. Cette limite stricte doit être gardée à l'esprit lors de la conception du moteur de rendu.
Voir également texture().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex)
Renvoie une liaison de ressources de shaders pour le numéro de liaison, les étapes du pipeline et la texture spécifiés par binding, stage, tex.
Remarque : cette fonction équivaut à appeler textures() avec un count égal à 1.
Remarque : tex peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre objet QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources sont présentes, transmis à QRhiCommandBuffer::setShaderResources().
Cela crée une liaison pour un objet de texture (image) séparé, alors que sampledTexture() convient pour les échantillonneurs d'images combinés. Dans le code GLSL compatible avec Vulkan, les textures séparées sont déclarées comme texture2D par opposition à sampler2D: layout(binding = 1) uniform texture2D tex;
Remarque : il se peut qu'un shader ne puisse pas consommer plus de 16 textures, en fonction de l'API graphique sous-jacente. Cette limite stricte doit être gardée à l'esprit lors de la conception du moteur de rendu. Cela ne s'applique pas aux tableaux de textures qui consomment un seul point de liaison (registre de shader) et peuvent contenir de 256 à 2048 textures, en fonction de l'API graphique sous-jacente. Les tableaux de textures (voir sampledTextures()) ne sont cependant pas différents à cet égard de l'utilisation du même nombre de textures individuelles.
Voir également textures() et sampler().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex)
Renvoie un lien de ressource de shader pour le numéro de lien donné, les étapes du pipeline et le tableau de textures (séparées) spécifié par binding, stage, count, et tex.
Remarque : count doit être au moins égal à 1 et ne doit pas dépasser 16.
Note : Lorsque count vaut 1, cette fonction est équivalente à texture().
Attention : Tous les éléments du tableau doivent être spécifiés.
Note : tex peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources sont présentes, transmis à QRhiCommandBuffer::setShaderResources().
Voir aussi texture() et sampler().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Renvoie un lien de ressource de shader pour le numéro de lien, les étapes du pipeline et la mémoire tampon spécifiés par binding, stage, et buf.
Remarque : si buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::UniformBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : si la taille de buf dépasse la limite indiquée pour QRhi::MaxUniformBufferRange, des erreurs inattendues peuvent se produire.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Renvoie une liaison de ressource de shader pour le numéro de liaison, les étapes du pipeline et la mémoire tampon spécifiés par binding, stage, et buf. Cette surcharge lie uniquement une région, comme spécifié par offset et size.
Remarque : il incombe à l'utilisateur de s'assurer que le décalage est aligné sur QRhi::ubufAlignment().
Remarque : size doit être supérieur à 0.
Note : Lorsque buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::UniformBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : si size dépasse la limite indiquée pour QRhi::MaxUniformBufferRange, des erreurs inattendues peuvent se produire.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size)
Renvoie une liaison de ressources d'ombrage pour le numéro de liaison, les étapes du pipeline et le tampon spécifiés par binding, stage, et buf. Le tampon uniforme est supposé avoir un décalage dynamique. Le décalage dynamique peut être spécifié dans QRhiCommandBuffer::setShaderResources(), ce qui permet d'utiliser des valeurs de décalage variables sans créer de nouvelles liaisons pour le tampon. La taille de la région liée est spécifiée par size. Comme pour les décalages non dynamiques, offset + size ne peut pas dépasser la taille de buf.
Remarque : lorsque buf n'est pas nul, il doit avoir été créé avec QRhiBuffer::UniformBuffer.
Remarque : buf peut être nul. Il est possible de créer un objet QRhiShaderResourceBindings avec des ressources non spécifiées, mais un tel objet ne peut pas être utilisé avec QRhiCommandBuffer::setShaderResources(). Il convient toutefois à la création de pipelines. Un tel pipeline doit alors toujours être utilisé avec un autre QRhiShaderResourceBindings compatible avec la mise en page et dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().
Remarque : si size dépasse la limite indiquée pour QRhi::MaxUniformBufferRange, des erreurs inattendues peuvent se produire.
Non-membres apparentés
[noexcept] size_t qHash(const QRhiShaderResourceBinding &key, size_t seed = 0)
Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.
[noexcept] bool operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
Renvoie false si toutes les liaisons dans les deux objets QRhiShaderResourceBinding a et b sont égales ; sinon, renvoie true.
[noexcept] bool operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
Renvoie true si le contenu des deux objets QRhiShaderResourceBinding a et b est identique. Cela inclut les ressources (tampon, texture) et les paramètres associés (décalage, taille). Pour comparer uniquement les dispositions (point de liaison, étape du pipeline, type de ressource), utilisez plutôt isLayoutCompatible().
© 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.