Sur cette page

QRhiShaderResourceBinding Class

Décrit la ressource de shader pour un seul point de liaison. 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

Types publics

enum StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage }
flags StageFlags
enum Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore }

Fonctions publiques

QRhiShaderResourceBinding()
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)
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 objet QRhiShaderResourceBinding ne peut pas être instancié directement. Utilisez plutôt les fonctions statiques telles que uniformBuffer() ou sampledTexture() pour obtenir une instance.

Remarque : il s'agit d'une API RHI dont la compatibilité n'est pas entièrement garantie ; voir QRhi pour plus de détails.

Documentation sur les types de membres

enum QRhiShaderResourceBinding::StageFlag
flags QRhiShaderResourceBinding::StageFlags

Valeurs d'indicateur permettant de préciser dans quelles étapes la ressource de shader est visible

ConstanteValeurDescription
QRhiShaderResourceBinding::VertexStage1 << 0Étape des sommets
QRhiShaderResourceBinding::TessellationControlStage1 << 1Étape de contrôle de tessellation (shader de coque)
QRhiShaderResourceBinding::TessellationEvaluationStage1 << 2Étape d’évaluation de la tessellation (shader de domaine)
QRhiShaderResourceBinding::FragmentStage1 << 4Étape des fragments (shader de pixel)
QRhiShaderResourceBinding::ComputeStage1 << 5Étape de calcul
QRhiShaderResourceBinding::GeometryStage1 << 3Étape de géométrie

Le type StageFlags est un typedef pour QFlags<StageFlag>. Il stocke une combinaison OR de valeurs StageFlag.

enum QRhiShaderResourceBinding::Type

Spécifie le type de la ressource de shader associée à un point de liaison

ConstanteValeurDescription
QRhiShaderResourceBinding::UniformBuffer0Tampon uniforme
QRhiShaderResourceBinding::SampledTexture1Échantillonneur d’images combiné (une paire texture-échantillonneur). Même lorsque le langage de shader associé à l’API 3D sous-jacente ne prend pas en charge ce concept (par exemple, D3D et HLSL), celui-ci est tout de même 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 shader.
QRhiShaderResourceBinding::Texture2Texture (distincte)
QRhiShaderResourceBinding::Sampler3Échantillonneur (distinct)
QRhiShaderResourceBinding::ImageLoad4Chargement d’image (avec GLSL, cela correspond à l’appel de ` imageLoad()` sur un seul niveau — et sur une seule ou toutes les couches — d’une texture exposée au shader en tant qu’objet image)
QRhiShaderResourceBinding::ImageStore5Enregistrement d’image (avec GLSL, cela correspond à l’appel de ` imageStore()` ou `imageAtomic*()` sur un seul niveau – et sur une ou toutes les couches – d’une texture exposée au shader sous forme d’objet image)
QRhiShaderResourceBinding::ImageLoadStore6Chargement et stockage d’images
QRhiShaderResourceBinding::BufferLoad7Chargement du tampon de stockage (en GLSL, cela correspond à la lecture à partir d'un tampon de stockage du shader)
QRhiShaderResourceBinding::BufferStore8Écriture dans un tampon de stockage (avec GLSL, cela correspond à l'écriture dans un tampon de stockage du shader)
QRhiShaderResourceBinding::BufferLoadStore9Chargement et enregistrement dans un tampon de stockage

Documentation des fonctions membres

[constexpr noexcept default] QRhiShaderResourceBinding::QRhiShaderResourceBinding()

Construit par défaut une instance de ` QRhiShaderResourceBinding`.

[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)

Renvoie une liaison de ressource de shader pour un tampon de stockage en lecture seule, avec le numéro d'binding et l'stage de pipeline indiqués.

Remarque : lorsque buf n’est pas nul, il doit avoir été créé à l’aide de QRhiBuffer::StorageBuffer.

Remarque : ` buf ` peut être nul. Il est possible de créer un ` 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible au niveau de la disposition, dont les ressources présentes sont transmises à ` QRhiCommandBuffer::setShaderResources()`.

Remarque : la disponibilité des ressources de chargement/stockagede tampon n’est garantie que dans le cadre d’un pipeline de calcul. Bien que certains backends puissent également prendre en charge l’utilisation de ces ressources dans un pipeline graphique, cette fonctionnalité n’est pas universellement prise en charge, et même lorsqu’elle l’est, des problèmes inattendus peuvent survenir en matière de barrières et de synchronisation. Par conséquent, évitez d’utiliser ces ressources avec des shaders autres que ceux 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 d'binding et le pipeline stage indiqués. Cette surcharge lie uniquement une région, telle que spécifiée 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 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la disposition, dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().

Remarque : la disponibilité du chargement/stockagedans le tampon n’est garantie que dans le cadre d’un pipeline de calcul. Bien que certains backends puissent également prendre en charge l’utilisation de ces ressources dans un pipeline graphique, cette fonctionnalité n’est pas universellement prise en charge, et même lorsqu’elle l’est, des problèmes inattendus peuvent survenir en matière de barrières et de synchronisation. Par conséquent, évitez d’utiliser ces ressources avec des shaders autres que ceux 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 d'binding et le pipeline stage indiqués.

Remarque : lorsque buf n’est pas nul, il doit avoir été créé à l’aide de QRhiBuffer::StorageBuffer.

Remarque : ` buf ` peut être nul. Il est possible de créer un ` 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible en termes de disposition, dont les ressources présentes sont passées à ` QRhiCommandBuffer::setShaderResources()`.

Remarque : la disponibilité des ressources de chargement/stockagede tampon n’est garantie que dans le cadre d’un pipeline de calcul. Bien que certains backends puissent également prendre en charge l’utilisation de ces ressources dans un pipeline graphique, cette fonctionnalité n’est pas prise en charge de manière universelle ; et même lorsqu’elle l’est, des problèmes inattendus peuvent survenir en matière de barrières et de synchronisation. Par conséquent, évitez d’utiliser ces ressources avec des shaders autres que ceux 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 d'binding et le pipeline stage indiqués. Cette surcharge lie uniquement une région, telle que spécifiée par offset et size.

Remarque : lorsque buf n’est pas nul, il doit avoir été créé à l’aide de QRhiBuffer::StorageBuffer.

Remarque : buf peut être nul. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings compatible au niveau de la disposition, dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().

Remarque : la disponibilité des ressources de chargement/stockagede tampon n’est garantie que dans le cadre d’un pipeline de calcul. Bien que certains backends puissent également prendre en charge l’utilisation de ces ressources dans un pipeline graphique, cette fonctionnalité n’est pas universellement prise en charge, et même lorsqu’elle l’est, des problèmes inattendus peuvent survenir en matière de barrières et de synchronisation. Par conséquent, évitez d’utiliser ces ressources avec des shaders autres que ceux 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 d'binding et le pipeline stage indiqués.

Remarque : lorsque buf n’est pas nul, il doit avoir été créé à l’aide de QRhiBuffer::StorageBuffer.

Remarque : ` buf ` peut être nul. Il est possible de créer un ` 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible au niveau de la disposition, dont les ressources présentes sont transmises à ` QRhiCommandBuffer::setShaderResources()`.

Remarque : la disponibilité des ressources de chargement/stockagede tampon n’est garantie que dans le cadre d’un pipeline de calcul. Bien que certains backends puissent également prendre en charge l’utilisation de ces ressources dans un pipeline graphique, cette fonctionnalité n’est pas universellement prise en charge, et même lorsqu’elle l’est, des problèmes inattendus peuvent survenir en matière de barrières et de synchronisation. Par conséquent, évitez d’utiliser ces ressources avec des shaders autres que ceux 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 d'binding et le pipeline stage indiqués. Cette surcharge lie uniquement une région, telle que spécifiée par offset et size.

Remarque : lorsque buf n’est pas nul, il doit avoir été créé à l’aide de QRhiBuffer::StorageBuffer.

Remarque : buf peut être nul. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings compatible au niveau de la disposition, dont les ressources présentes sont transmises à QRhiCommandBuffer::setShaderResources().

Remarque : la disponibilité des ressources de chargement/stockagede tampon n’est garantie que dans le cadre d’un pipeline de calcul. Bien que certains backends puissent également prendre en charge l’utilisation de ces ressources dans un pipeline graphique, cette fonctionnalité n’est pas universellement prise en charge, et même lorsqu’elle l’est, des problèmes inattendus peuvent survenir en matière de barrières et de synchronisation. Par conséquent, évitez d’utiliser ces ressources avec des shaders autres que ceux 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 en lecture seule, avec le numéro d'binding et le pipeline stage indiqués. Les opérations de chargement de l'image auront accès à toutes les couches de l'level spécifié. (Ainsi, si la texture est une carte cubique, le shader doit utiliser imageCube au lieu de image2D)

Remarque : 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 ` 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible au niveau de la disposition et dont les ressources sont transmises à ` QRhiCommandBuffer::setShaderResources()`.

Remarque : le chargement/stockaged’images n’est disponible que dans les étapes de calcul et de fragment.

[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 d'binding et le pipeline stage indiqués. Les opérations de chargement/stockage de l'image auront accès à toutes les couches de l'level spécifiée. (Ainsi, si la texture est une carte cubique, le shader doit utiliser imageCube au lieu d'image2D)

Remarque : 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 ` 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible au niveau de la disposition, dont les ressources présentes sont passées à ` QRhiCommandBuffer::setShaderResources()`.

Remarque : le chargement/stockaged’images n’est disponible que dans les étapes de calcul et de fragment.

[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 d'binding et le pipeline stage indiqués. Les opérations de stockage d'image auront accès à toutes les couches de l'level spécifié. (Ainsi, si la texture est une carte cubique, le shader doit utiliser imageCube au lieu de image2D)

Remarque : lorsque tex n’est pas nul, il doit avoir été créé avec QRhiTexture::UsedWithLoadStore.

Remarque : ` tex ` peut être null. Il est possible de créer une ` 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é conjointement avec une autre ` QRhiShaderResourceBindings ` compatible au niveau de la disposition, dont les ressources présentes sont transmises à ` QRhiCommandBuffer::setShaderResources()`.

Remarque : le chargement/stockaged’images n’est disponible que dans les étapes de calcul et de fragment.

bool QRhiShaderResourceBinding::isLayoutCompatible(const QRhiShaderResourceBinding &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).

Par exemple, les dispositions « a » et « b » ci-dessous ne sont pas identiques, mais sont compatibles au niveau de la disposition :

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 ressource de shader correspondant au numéro de liaison, aux étapes de pipeline, à la texture et à l'échantillonneur spécifiés respectivement par binding, stage, tex et sampler.

Remarque : cette fonction équivaut à appeler ` sampledTextures()` avec une valeur de ` count ` égale à 1.

Remarque : tex et sampler peuvent être nuls. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la disposition et dont les ressources sont présentes, passé à QRhiCommandBuffer::setShaderResources().

Remarque : un shader peut ne pas être en mesure d’utiliser plus de 16 textures/échantillonneurs, selon l’API graphique sous-jacente. Cette limite stricte doit être prise en compte lors de la conception du moteur de rendu. Cela ne s’applique pas aux tableaux de textures qui n’utilisent qu’un seul point de liaison (registre de shader) et peuvent contenir entre 256 et 2 048 textures, selon l’API graphique sous-jacente. Les tableaux de textures (voir sampledTextures()) ne diffèrent toutefois pas, à cet égard, de l’utilisation d’un 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 une liaison de ressource de shader correspondant au numéro de liaison donné, aux étapes de pipeline et au tableau de paires texture-échantillonneur spécifiées par binding, stage, count et texSamplers.

Remarque : count doit être au moins égal à 1 et ne pas dépasser 16.

Remarque : lorsque count est égal à 1, cette fonction est équivalente à sampledTexture().

Cette fonction est pertinente lorsque des tableaux d’échantillonneurs d’image combinés sont impliqués. Par exemple, en GLSL, ` layout(binding = 5) uniform sampler2D shadowMaps[8]; ` déclare un tableau d’échantillonneurs d’image combinés. L’application doit alors fournir un ` QRhiShaderResourceBinding ` pour le point de liaison 5, configuré en appelant cette fonction avec ` count ` défini à 8 et une texture et un échantillonneur valides pour chaque élément du tableau.

count Avertissement : 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 un QRhiTexture de 8. De plus, toutes les instances de et de QRhiSampler doivent être valides ; ainsi, nullptr n’est pas une valeur acceptée. Cela est dû au fait que certaines API sous-jacentes, telles que Vulkan, exigent un objet image et un objet échantillonneur 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 utilisés dans le shader).

Remarque : ` texSamplers ` peut être nul. Il est possible de créer un ` 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible au niveau de la disposition et comportant des ressources, transmis à ` QRhiCommandBuffer::setShaderResources()`.

Voir également sampledTexture().

[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)

Renvoie une liaison de ressource de shader correspondant au numéro de liaison, aux étapes de pipeline et à l'échantillonneur spécifiés respectivement par binding, stage et sampler.

Remarque : sampler peut être nul. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la disposition et dont les ressources sont transmises à QRhiCommandBuffer::setShaderResources().

Les tableaux d’échantillonneurs distincts ne sont pas pris en charge.

Cela crée une liaison pour un objet échantillonneur distinct, alors que la fonction sampledTexture() est adaptée aux échantillonneurs d’images combinés. Dans le code GLSL compatible Vulkan, les échantillonneurs distincts sont déclarés sous la forme sampler, par opposition à sampler2D: layout(binding = 2) uniform sampler samp;

Lorsqu’un échantillonneur de type ` texture2D ` et un échantillonneur de type ` sampler ` sont tous deux présents, ils peuvent être utilisés conjointement pour échantillonner la texture : ` fragColor = texture(sampler2D(tex, samp), texcoord);`.

Remarque : un shader peut ne pas être en mesure d’utiliser plus de 16 échantillonneurs, selon l’API graphique sous-jacente. Cette limite stricte doit être prise en compte 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 ressource de shader correspondant au numéro de liaison, aux étapes de pipeline et à la texture spécifiés par binding, stage et tex.

Remarque : cette fonction équivaut à appeler ` textures()` avec un ` count ` égal à 1.

Remarque : tex peut être nul. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la disposition et comportant des ressources, transmis à QRhiCommandBuffer::setShaderResources().

Cela crée une liaison pour un objet de texture (image) distinct, tandis que ` sampledTexture()` convient aux échantillonneurs d’images combinés. Dans le code GLSL compatible avec Vulkan, les textures distinctes sont déclarées comme ` texture2D `, par opposition à ` sampler2D` : layout(binding = 1) uniform texture2D tex;

Remarque : un shader peut ne pas être en mesure d’utiliser plus de 16 textures, selon l’API graphique sous-jacente. Cette limite stricte doit être prise en compte lors de la conception du moteur de rendu. Cela ne s’applique pas aux tableaux de textures qui occupent un seul point de liaison (registre de shader) et peuvent contenir entre 256 et 2 048 textures, selon l’API graphique sous-jacente. Les tableaux de textures (voir sampledTextures()) ne présentent toutefois aucune différence à cet égard par rapport à 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 une liaison de ressource de shader correspondant au numéro de liaison donné, aux étapes de pipeline et au tableau de textures (distinctes) spécifiées par binding, stage, count et tex.

Remarque : count doit être au moins égal à 1 et ne pas dépasser 16.

Remarque : lorsque count vaut 1, cette fonction est équivalente à texture().

Avertissement : tous les éléments du tableau doivent être spécifiés.

Remarque : tex peut être nul. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la disposition et dont les ressources sont transmises à QRhiCommandBuffer::setShaderResources().

Voir également texture() et sampler().

[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)

Renvoie une liaison de ressource de shader pour le numéro de liaison, les étapes de pipeline et le tampon indiqués respectivement par binding, stage et buf.

Remarque : lorsque buf n’est pas nul, il doit avoir été créé à l’aide de QRhiBuffer::UniformBuffer.

Remarque : buf peut être nul. Il est possible de créer un 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la structure et dont les ressources 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 de pipeline et le tampon indiqués respectivement par binding, stage et buf. Cette surcharge lie uniquement une région, telle que spécifiée par offset et size.

Remarque : il appartient à l’utilisateur de s’assurer que le décalage est aligné sur QRhi::ubufAlignment().

Remarque : size doit être supérieur à 0.

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 ` QRhiShaderResourceBindings ` sans spécifier de ressources, 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é conjointement avec un autre ` QRhiShaderResourceBindings ` compatible au niveau de la mise en page, dont les ressources 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 ressource de shader pour le numéro de liaison, les étapes de pipeline et le tampon indiqués respectivement par binding, stage et buf. On suppose que le tampon uniforme possède 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 nouveaux 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 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é conjointement avec un autre QRhiShaderResourceBindings, compatible au niveau de la structure, 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.

Éléments non membres associés

[noexcept] size_t qHash(const QRhiShaderResourceBinding &key, size_t seed = 0)

Renvoie la valeur de hachage de key, en utilisant seed comme graine pour le calcul.

[noexcept] bool operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)

Renvoie « false » si toutes les associations contenues dans les deux objets « QRhiShaderResourceBinding » a et b sont identiques ; 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) ainsi que les paramètres associés (décalage, taille). Pour ne comparer que les configurations (point de liaison, étape du pipeline, type de ressource), utilisez plutôt la fonction « 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.