QRhiVertexInputAttribute Class

Beschreibt ein einzelnes Vertex-Eingabeelement. Mehr...

Kopfzeile: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Since: Qt 6.6

Öffentliche Typen

enum Format { Float4, Float3, Float2, Float, UNormByte4, …, SShort }

Öffentliche Funktionen

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)

Detaillierte Beschreibung

Die Mitglieder geben die Bindungsnummer, die Position, das Format und den Offset für ein einzelnes Vertex-Eingabeelement an.

Hinweis: Für HLSL wird angenommen, dass der aus SPIR-V übersetzte Vertex-Shader TEXCOORD<location> als Semantik für jede Eingabe verwendet. Daher kein separater semantischer Name und Index.

Nehmen wir als Beispiel einen Vertex-Shader mit den folgenden Eingaben an:

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

Nehmen wir an, dass wir 3 Komponenten-Vertex-Positionen (x, y, z) und 2 Komponenten-Texturkoordinaten (u, v) in einem nicht verschachtelten Format in einem Puffer (oder sogar in separaten Puffern) zur Verfügung gestellt bekommen. Sobald zwei Bindungen definiert sind, könnten die Attribute wie folgt angegeben werden:

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

Sobald eine Grafikpipeline mit diesem Scheitelpunkt-Eingangslayout gebunden ist, könnten die Scheitelpunkt-Eingänge wie folgt für das Zeichnen eines Würfels mit 36 Scheitelpunkten eingerichtet werden, wobei davon ausgegangen wird, dass wir einen einzigen Puffer mit zuerst den Positionen und dann den Texturkoordinaten haben:

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

Bei der Arbeit mit verschachtelten Daten gibt es in der Regel nur eine Bindung, wobei sich mehrere Attribute auf denselben Pufferbindungspunkt beziehen:

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

und dann:

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

Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.

Siehe auch QRhiCommandBuffer::setVertexInput().

Dokumentation der Mitgliedstypen

enum QRhiVertexInputAttribute::Format

Gibt den Typ der Elementdaten an.

KonstanteWertBeschreibung
QRhiVertexInputAttribute::Float40Vier-Komponenten-Float-Vektor
QRhiVertexInputAttribute::Float31Drei-Komponenten-Float-Vektor
QRhiVertexInputAttribute::Float22Zweikomponenten-Float-Vektor
QRhiVertexInputAttribute::Float3Float
QRhiVertexInputAttribute::UNormByte44Vier-Komponenten-Vektor normalisiertes Byte ohne Vorzeichen
QRhiVertexInputAttribute::UNormByte25Zweikomponenten-Vektor, normalisiert, vorzeichenloses Byte
QRhiVertexInputAttribute::UNormByte6Normalisiertes Byte ohne Vorzeichen
QRhiVertexInputAttribute::UInt47Vier-Komponenten-Vektor für ganze Zahlen ohne Vorzeichen
QRhiVertexInputAttribute::UInt38Drei-Komponenten-Vektor für ganze Zahlen ohne Vorzeichen
QRhiVertexInputAttribute::UInt29Zweikomponenten-Vektor für ganze Zahlen ohne Vorzeichen
QRhiVertexInputAttribute::UInt10Ganze Zahl ohne Vorzeichen
QRhiVertexInputAttribute::SInt411Ganzzahlvektor mit Vorzeichen aus vier Komponenten
QRhiVertexInputAttribute::SInt312Drei-Komponenten-Vektor mit Vorzeichen
QRhiVertexInputAttribute::SInt213Zwei-Komponenten-Vektor mit Vorzeichen
QRhiVertexInputAttribute::SInt14Vorzeichenbehaftete Ganzzahl
QRhiVertexInputAttribute::Half415Vier-Komponenten-Float-Vektor mit halber Genauigkeit (16 Bit)
QRhiVertexInputAttribute::Half316Drei-Komponenten-Float-Vektor mit halber Genauigkeit (16 Bit)
QRhiVertexInputAttribute::Half217Zweikomponenten-Float-Vektor mit halber Genauigkeit (16 Bit)
QRhiVertexInputAttribute::Half18Halbe Genauigkeit (16 Bit) Float
QRhiVertexInputAttribute::UShort419Vierfacher vorzeichenloser Short (16 Bit) Integer-Vektor
QRhiVertexInputAttribute::UShort320Dreiteiliger vorzeichenloser Kurzvektor (16 Bit) Ganzzahlvektor
QRhiVertexInputAttribute::UShort221Zweikomponenten-Ganzzahlvektor ohne Vorzeichen (16 Bit)
QRhiVertexInputAttribute::UShort22Kurze Ganzzahl ohne Vorzeichen (16 Bit)
QRhiVertexInputAttribute::SShort423Vierfacher vorzeichenbehafteter Short (16 Bit) Integer-Vektor
QRhiVertexInputAttribute::SShort324Vorzeichenbehafteter Dreikomponenten-Kurzschlussvektor (16 Bit) Ganzzahlvektor
QRhiVertexInputAttribute::SShort225Zweikomponenten-Vektor mit vorzeichenbehafteter Kurzzahl (16 Bit) Ganzzahl
QRhiVertexInputAttribute::SShort26Vorzeichenbehaftete kurze (16-Bit) Ganzzahl

Hinweis: Die Unterstützung für halbgenaue Fließkomma-Attribute wird zur Laufzeit durch das QRhi::Feature::HalfAttributes-Flag angezeigt.

Hinweis: Direct3D 11/12 unterstützt 16-Bit-Eingabeattribute, aber nicht die Typen Half3, UShort3 oder SShort3. Die D3D-Backends geben Half3 als Half4, UShort3 als UShort4 und SShort3 als SShort4 weiter. Um plattformübergreifende Kompatibilität zu gewährleisten, sollten 16-Bit-Eingaben auf 8 Byte aufgefüllt werden.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept] QRhiVertexInputAttribute::QRhiVertexInputAttribute()

Konstruiert eine Standard-Eingabeattributbeschreibung für Scheitelpunkte.

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

Konstruiert eine Scheitelpunkt-Eingabeattributbeschreibung mit der angegebenen binding Nummer, location, format und offset.

matrixSlice sollte -1 sein, es sei denn, dieses Attribut entspricht einer Zeile oder Spalte einer Matrix (z. B. wird eine 4x4-Matrix zu 4 vec4s, die 4 aufeinanderfolgende Scheitelpunkt-Eingabestellen verbrauchen); in diesem Fall ist es der Index der Zeile oder Spalte. location - matrixSlice muss immer gleich dem location für die erste Zeile oder Spalte der abgerollten Matrix sein.

int QRhiVertexInputAttribute::binding() const

Gibt den Index der Bindungsstelle zurück.

Siehe auch setBinding().

QRhiVertexInputAttribute::Format QRhiVertexInputAttribute::format() const

Gibt das Format des Vertex-Eingabeelements zurück.

Siehe auch setFormat().

int QRhiVertexInputAttribute::location() const

Gibt die Position des Vertex-Eingabeelements zurück.

Siehe auch setLocation().

int QRhiVertexInputAttribute::matrixSlice() const

Gibt das Matrix-Slice zurück, wenn das Eingabeelement einer Zeile oder Spalte einer Matrix entspricht, oder -1, wenn es nicht relevant ist.

Siehe auch setMatrixSlice().

quint32 QRhiVertexInputAttribute::offset() const

Gibt den Byte-Offset für das Eingabeelement zurück.

Siehe auch setOffset().

void QRhiVertexInputAttribute::setBinding(int b)

Setzt den Bindungspunktindex auf b. Standardmäßig ist dieser auf 0 gesetzt.

Siehe auch binding().

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

Setzt das Format des Vertex-Eingabeelements auf f. Standardmäßig ist dies auf Float4 gesetzt.

Siehe auch format().

void QRhiVertexInputAttribute::setLocation(int loc)

Setzt die Position des Scheitelpunkt-Eingabeelements auf loc. Standardmäßig ist dies auf 0 gesetzt.

Siehe auch location().

void QRhiVertexInputAttribute::setMatrixSlice(int slice)

Setzt die Matrix slice. Standardmäßig ist dieser Wert auf -1 gesetzt und sollte nur dann auf einen Wert >= 0 gesetzt werden, wenn dieses Attribut einer Zeile oder Spalte einer Matrix entspricht (z. B. wird eine 4x4-Matrix zu 4 vec4s, die 4 aufeinanderfolgende Vertex-Eingabeorte verbrauchen). In diesem Fall ist es der Index der Zeile oder Spalte. location - matrixSlice muss immer gleich dem location für die erste Zeile oder Spalte der abgerollten Matrix sein.

Siehe auch matrixSlice().

void QRhiVertexInputAttribute::setOffset(quint32 ofs)

Setzt den Byte-Offset für das Eingabeelement auf ofs.

Siehe auch offset().

Verwandte Nicht-Mitglieder

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

Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.

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

Gibt false zurück, wenn die Werte in den beiden Objekten QRhiVertexInputAttribute a und b gleich sind; andernfalls wird true zurückgegeben.

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

Gibt true zurück, wenn die Werte in den beiden Objekten QRhiVertexInputAttribute a und b gleich sind.

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