Sur cette page

QRhiVertexInputAttribute Class

Décrit un seul élément d'entrée de sommet. 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 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 seul élément d'entrée de vertex.

Remarque : pour HLSL, on suppose que le vertex shader traduit de SPIR-V utilise TEXCOORD<location> comme sémantique pour chaque entrée. Il n'y a donc pas de nom sémantique et d'index séparés.

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

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

Supposons maintenant que nous ayons des positions de vertex à 3 composants (x, y, z) et des coordonnées de texture à 2 composants (u, v) qui sont fournis dans un format non entrelacé dans un tampon (ou même des tampons séparés). Une fois que deux liaisons sont définies, les attributs peuvent ê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ée de vertex est lié, les entrées de vertex peuvent être configurées comme suit pour dessiner un cube avec 36 sommets, en supposant que nous ayons un seul tampon avec d'abord les positions et ensuite 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 au 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) }
});

et ensuite :

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

Remarque : il s'agit d'une API RHI avec des garanties de compatibilité limitées, voir QRhi pour plus de détails.

Voir également QRhiCommandBuffer::setVertexInput().

Documentation sur les types de membres

enum QRhiVertexInputAttribute::Format

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

ConstanteValeurDescription de l'élément
QRhiVertexInputAttribute::Float40Vecteur flottant à quatre composantes
QRhiVertexInputAttribute::Float31Vecteur flottant à trois composantes
QRhiVertexInputAttribute::Float22Vecteur flottant à deux composantes
QRhiVertexInputAttribute::Float3Flottant
QRhiVertexInputAttribute::UNormByte44Vecteur d'octets non signés normalisés à quatre composantes
QRhiVertexInputAttribute::UNormByte25Vecteur d'octets non signés normalisés à 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 d'entiers signés à deux composantes
QRhiVertexInputAttribute::SInt14Entier signé
QRhiVertexInputAttribute::Half415Vecteur flottant de demi-précision à quatre composantes (16 bits)
QRhiVertexInputAttribute::Half316Vecteur flottant de demi-précision à trois composantes (16 bits)
QRhiVertexInputAttribute::Half217Vecteur flottant de demi-précision à deux composantes (16 bits)
QRhiVertexInputAttribute::Half18Vecteur de demi-précision (16 bits) flottant
QRhiVertexInputAttribute::UShort419Vecteur entier non signé à quatre composantes (16 bits)
QRhiVertexInputAttribute::UShort320Vecteur de nombres entiers courts non signés à trois composantes (16 bits)
QRhiVertexInputAttribute::UShort221Vecteur entier court non signé à deux composantes (16 bits)
QRhiVertexInputAttribute::UShort22Vecteur entier court non signé (16 bits)
QRhiVertexInputAttribute::SShort423Vecteur d'entiers courts signés à quatre composantes (16 bits)
QRhiVertexInputAttribute::SShort324Vecteur de nombres entiers courts signés à trois composantes (16 bits)
QRhiVertexInputAttribute::SShort225Vecteur de nombres entiers courts signés à deux composantes (16 bits)
QRhiVertexInputAttribute::SShort26Entier court signé (16 bits)

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

Remarque : Direct3D 11/12 prend en charge les attributs d'entrée de 16 bits, mais ne prend pas en charge les types Half3, UShort3 ou SShort3. Les backends D3D transmettent Half3 comme Half4, UShort3 comme UShort4 et SShort3 comme SShort4. Pour assurer la compatibilité entre les plates-formes, les entrées 16 bits doivent être complétées par 8 octets.

Documentation des fonctions membres

[constexpr noexcept] QRhiVertexInputAttribute::QRhiVertexInputAttribute()

Construit une description d'attribut d'entrée de sommet par défaut.

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 numéro binding 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 vec4s, consommant 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 à location pour la première ligne ou la première colonne de la matrice déroulée.

int QRhiVertexInputAttribute::binding() const

Renvoie l'indice du point de liaison.

Voir également setBinding().

QRhiVertexInputAttribute::Format QRhiVertexInputAttribute::format() const

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

Voir aussi setFormat().

int QRhiVertexInputAttribute::location() const

Renvoie l'emplacement de l'élément d'entrée du sommet.

Voir également 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 s'il n'est pas pertinent.

Voir aussi setMatrixSlice().

quint32 QRhiVertexInputAttribute::offset() const

Renvoie le décalage d'un octet pour l'élément d'entrée.

Voir aussi setOffset().

void QRhiVertexInputAttribute::setBinding(int b)

Fixe l'indice du point de liaison à b. Par défaut, il est fixé à 0.

Voir aussi binding().

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

Définit le format de l'élément d'entrée du sommet à f. Par défaut, il est défini à Float4.

Voir également format().

void QRhiVertexInputAttribute::setLocation(int loc)

Définit l'emplacement de l'élément d'entrée du sommet à loc. Par défaut, cette valeur est fixée à 0.

Voir également location().

void QRhiVertexInputAttribute::setMatrixSlice(int slice)

Définit la matrice slice. Par défaut, cette valeur est fixée à -1 et ne doit être fixée à une valeur >= 0 que lorsque cet attribut correspond à une ligne ou à une colonne d'une matrice (par exemple, une matrice 4x4 devient 4 vec4s, consommant 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 à location pour la première ligne ou la première colonne de la matrice déroulée.

Voir également matrixSlice().

void QRhiVertexInputAttribute::setOffset(quint32 ofs)

Définit le décalage d'octet pour l'élément d'entrée à ofs.

Voir également offset().

Non-membres apparentés

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

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

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

Renvoie false si les valeurs des deux objets QRhiVertexInputAttribute a et b sont égales ; sinon, renvoie true.

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

Renvoie true si les valeurs des deux objets QRhiVertexInputAttribute a et b sont égales.

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