Sur cette page

QRhiVertexInputAttribute Class

Décrit un élément d'entrée à sommet unique. 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 Format { Float4, Float3, Float2, Float, UNormByte4, …, SShort }

Fonctions publiques

QRhiVertexInputAttribute()
QRhiVertexInputAttribute(int binding, int location, QRhiVertexInputAttribute::Format format, quint32 offset, int matrixSlice = -1)
int binding() const
QRhiVertexInputAttribute::Format format() const
int location() const
int matrixSlice() const
quint32 offset() const
void setBinding(int b)
void setFormat(QRhiVertexInputAttribute::Format f)
void setLocation(int loc)
void setMatrixSlice(int slice)
void setOffset(quint32 ofs)
size_t qHash(const QRhiVertexInputAttribute &key, size_t seed = 0)
bool operator!=(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b)
bool operator==(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b)

Description détaillée

Les membres spécifient le numéro de liaison, l'emplacement, le format et le décalage d'un élément d'entrée de sommet unique.

Remarque : pour HLSL, on part du principe que le shader de sommet traduit à partir de SPIR-V utilise « TEXCOORD<location> » comme sémantique pour chaque entrée. Il n’y a donc pas de nom de sémantique ni d’index distincts.

À titre d’exemple, supposons un shader de sommets avec les entrées suivantes :

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 texcoord;

Supposons maintenant que nous disposions de positions de sommets à 3 composantes (x, y, z) et de coordonnées de texture à 2 composantes (u, v), fournies dans un format non entrelacé dans un tampon (voire dans des tampons distincts). Une fois les deux liaisons définies, les attributs pourraient être spécifiés comme suit :

QRhiVertexInputLayout inputLayout;
inputLayout.setBindings({
    { 3 * sizeof(float) },
    { 2 * sizeof(float) }
});
inputLayout.setAttributes({
    { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
    { 1, 1, QRhiVertexInputAttribute::Float2, 0 }
});

Une fois qu’un pipeline graphique avec cette disposition d’entrées de sommets est lié, les entrées de sommets pourraient être configurées comme suit pour dessiner un cube de 36 sommets, en supposant que nous disposions d’un seul tampon contenant d’abord les positions, puis les coordonnées de texture :

const QRhiCommandBuffer::VertexInput vbufBindings[] = {
    { cubeBuf, 0 },
    { cubeBuf, 36 * 3 * sizeof(float) }
};
cb->setVertexInput(0, 2, vbufBindings);

Lorsque l’on travaille avec des données entrelacées, il n’y a généralement qu’une seule liaison, avec plusieurs attributs se référant à ce même point de liaison du tampon :

QRhiVertexInputLayout inputLayout;
inputLayout.setBindings({
    { 5 * sizeof(float) }
});
inputLayout.setAttributes({
    { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
    { 0, 1, QRhiVertexInputAttribute::Float2, 3 * sizeof(float) }
});

puis :

const QRhiCommandBuffer::VertexInput vbufBinding(interleavedCubeBuf, 0);
cb->setVertexInput(0, 1, &vbufBinding);

Remarque : il s’agit d’une API RHI dont la compatibilité est garantie de manière limitée ; voir QRhi pour plus de détails.

Voir également QRhiCommandBuffer::setVertexInput().

Documentation sur les types de membres

enum QRhiVertexInputAttribute::Format

Spécifie le type des données de l'élément.

ConstanteValeurDescription
QRhiVertexInputAttribute::Float40Vecteur à quatre composantes de type float
QRhiVertexInputAttribute::Float31Vecteur à trois composantes de type float
QRhiVertexInputAttribute::Float22Vecteur à deux composantes de type float
QRhiVertexInputAttribute::Float3Float
QRhiVertexInputAttribute::UNormByte44Vecteur d'octets non signés normalisés à quatre composantes
QRhiVertexInputAttribute::UNormByte25Vecteur d'octets non signé normalisé à deux composantes
QRhiVertexInputAttribute::UNormByte6Octet non signé normalisé
QRhiVertexInputAttribute::UInt47Vecteur d'entiers non signés à quatre composantes
QRhiVertexInputAttribute::UInt38Vecteur d'entiers non signés à trois composantes
QRhiVertexInputAttribute::UInt29Vecteur d'entiers non signés à deux composantes
QRhiVertexInputAttribute::UInt10Entier non signé
QRhiVertexInputAttribute::SInt411Vecteur d'entiers signés à quatre composantes
QRhiVertexInputAttribute::SInt312Vecteur d'entiers signés à trois composantes
QRhiVertexInputAttribute::SInt213Vecteur à deux composantes d'entiers signés
QRhiVertexInputAttribute::SInt14Entier signé
QRhiVertexInputAttribute::Half415Vecteur flottant à demi-précision (16 bits) à quatre composantes
QRhiVertexInputAttribute::Half316Vecteur flottant à demi-précision (16 bits) à trois composantes
QRhiVertexInputAttribute::Half217Vecteur flottant à demi-précision (16 bits) à deux composantes
QRhiVertexInputAttribute::Half18Nombre à virgule flottante de demi-précision (16 bits)
QRhiVertexInputAttribute::UShort419Vecteur d'entiers courts non signés (16 bits) à quatre composantes
QRhiVertexInputAttribute::UShort320Vecteur d'entiers courts non signés (16 bits) à trois composantes
QRhiVertexInputAttribute::UShort221Vecteur d'entiers courts non signés (16 bits) à deux composantes
QRhiVertexInputAttribute::UShort22Entier court non signé (16 bits)
QRhiVertexInputAttribute::SShort423Vecteur de quatre composantes de type entier court signé (16 bits)
QRhiVertexInputAttribute::SShort324Vecteur d'entiers courts signés (16 bits) à trois composantes
QRhiVertexInputAttribute::SShort225Vecteur de deux éléments entiers signés de type « short » (16 bits)
QRhiVertexInputAttribute::SShort26Entier court signé (16 bits)

Remarque : la prise en charge des attributs à virgule flottante demi-précision est indiquée au moment de l'exécution par l'indicateur de fonctionnalité « QRhi::Feature::HalfAttributes ».

Remarque : Direct3D 11/12 prend en charge les attributs d'entrée 16 bits, mais ne prend pas en charge les types Half3, UShort3 ou SShort3. Les backends D3D transmettent Half3 sous la forme Half4, UShort3 sous la forme UShort4 et SShort3 sous la forme SShort4. Pour garantir la compatibilité multiplateforme, les entrées de 16 bits doivent être complétées pour atteindre 8 octets.

Documentation des fonctions membres

[constexpr noexcept default] QRhiVertexInputAttribute::QRhiVertexInputAttribute()

Crée une description par défaut de l'attribut d'entrée « vertex ».

QRhiVertexInputAttribute::QRhiVertexInputAttribute(int binding, int location, QRhiVertexInputAttribute::Format format, quint32 offset, int matrixSlice = -1)

Construit une description d’attribut d’entrée de sommet avec le nombre d’ binding s spécifié, location, format et offset.

matrixSlice doit être égal à -1, sauf lorsque cet attribut correspond à une ligne ou à une colonne d'une matrice (par exemple, une matrice 4x4 devient 4 vec4, occupant 4 emplacements d'entrée de sommet consécutifs), auquel cas il s'agit de l'index de la ligne ou de la colonne. location - matrixSlice doit toujours être égal à l’ location e de la première ligne ou colonne de la matrice déroulée.

int QRhiVertexInputAttribute::binding() const

Renvoie l'index du point de liaison.

Voir également la fonction « setBinding() ».

QRhiVertexInputAttribute::Format QRhiVertexInputAttribute::format() const

Renvoie le format de l'élément de point d'entrée.

Voir également setFormat().

int QRhiVertexInputAttribute::location() const

Renvoie la position de l'élément de saisie « vertex ».

Voir aussi setLocation().

int QRhiVertexInputAttribute::matrixSlice() const

Renvoie la tranche de matrice si l'élément d'entrée correspond à une ligne ou à une colonne d'une matrice, ou -1 si ce n'est pas le cas.

Voir également setMatrixSlice().

quint32 QRhiVertexInputAttribute::offset() const

Renvoie le décalage en octets de l'élément d'entrée.

Voir aussi setOffset().

void QRhiVertexInputAttribute::setBinding(int b)

Définit l'index du point de liaison sur b. Par défaut, cette valeur est définie sur 0.

Voir également binding().

void QRhiVertexInputAttribute::setFormat(QRhiVertexInputAttribute::Format f)

Définit le format de l'élément d'entrée des sommets sur « f ». Par défaut, il est défini sur « Float4 ».

Voir également format().

void QRhiVertexInputAttribute::setLocation(int loc)

Définit la position de l'élément d'entrée du sommet sur loc. Par défaut, cette valeur est définie sur 0.

Voir également location().

void QRhiVertexInputAttribute::setMatrixSlice(int slice)

Définit l'slice de la matrice. Par défaut, cette valeur est définie sur -1 et ne doit être définie sur une valeur a >= 0 que lorsque cet attribut correspond à une ligne ou une colonne d’une matrice (par exemple, une matrice 4x4 devient 4 vec4, occupant 4 emplacements d’entrée de sommets consécutifs), auquel cas il s’agit de l’index de la ligne ou de la colonne. location - matrixSlice doit toujours être égal à l’ location e de la première ligne ou colonne de la matrice déroulée.

Voir également matrixSlice().

void QRhiVertexInputAttribute::setOffset(quint32 ofs)

Définit le décalage en octets de l'élément d'entrée sur ofs.

Voir également offset().

Éléments non membres associés

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

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

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

Renvoie « false » si les valeurs des deux objets « QRhiVertexInputAttribute » ( a et b ) sont identiques ; sinon, renvoie « true ».

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

Renvoie « true » si les valeurs contenues dans les deux objets « QRhiVertexInputAttribute » a et b sont identiques.

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