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) |
Verwandte Nicht-Mitglieder
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.
Konstante | Wert | Beschreibung |
---|---|---|
QRhiVertexInputAttribute::Float4 | 0 | Vier-Komponenten-Float-Vektor |
QRhiVertexInputAttribute::Float3 | 1 | Drei-Komponenten-Float-Vektor |
QRhiVertexInputAttribute::Float2 | 2 | Zweikomponenten-Float-Vektor |
QRhiVertexInputAttribute::Float | 3 | Float |
QRhiVertexInputAttribute::UNormByte4 | 4 | Vier-Komponenten-Vektor normalisiertes Byte ohne Vorzeichen |
QRhiVertexInputAttribute::UNormByte2 | 5 | Zweikomponenten-Vektor, normalisiert, vorzeichenloses Byte |
QRhiVertexInputAttribute::UNormByte | 6 | Normalisiertes Byte ohne Vorzeichen |
QRhiVertexInputAttribute::UInt4 | 7 | Vier-Komponenten-Vektor für ganze Zahlen ohne Vorzeichen |
QRhiVertexInputAttribute::UInt3 | 8 | Drei-Komponenten-Vektor für ganze Zahlen ohne Vorzeichen |
QRhiVertexInputAttribute::UInt2 | 9 | Zweikomponenten-Vektor für ganze Zahlen ohne Vorzeichen |
QRhiVertexInputAttribute::UInt | 10 | Ganze Zahl ohne Vorzeichen |
QRhiVertexInputAttribute::SInt4 | 11 | Ganzzahlvektor mit Vorzeichen aus vier Komponenten |
QRhiVertexInputAttribute::SInt3 | 12 | Drei-Komponenten-Vektor mit Vorzeichen |
QRhiVertexInputAttribute::SInt2 | 13 | Zwei-Komponenten-Vektor mit Vorzeichen |
QRhiVertexInputAttribute::SInt | 14 | Vorzeichenbehaftete Ganzzahl |
QRhiVertexInputAttribute::Half4 | 15 | Vier-Komponenten-Float-Vektor mit halber Genauigkeit (16 Bit) |
QRhiVertexInputAttribute::Half3 | 16 | Drei-Komponenten-Float-Vektor mit halber Genauigkeit (16 Bit) |
QRhiVertexInputAttribute::Half2 | 17 | Zweikomponenten-Float-Vektor mit halber Genauigkeit (16 Bit) |
QRhiVertexInputAttribute::Half | 18 | Halbe Genauigkeit (16 Bit) Float |
QRhiVertexInputAttribute::UShort4 | 19 | Vierfacher vorzeichenloser Short (16 Bit) Integer-Vektor |
QRhiVertexInputAttribute::UShort3 | 20 | Dreiteiliger vorzeichenloser Kurzvektor (16 Bit) Ganzzahlvektor |
QRhiVertexInputAttribute::UShort2 | 21 | Zweikomponenten-Ganzzahlvektor ohne Vorzeichen (16 Bit) |
QRhiVertexInputAttribute::UShort | 22 | Kurze Ganzzahl ohne Vorzeichen (16 Bit) |
QRhiVertexInputAttribute::SShort4 | 23 | Vierfacher vorzeichenbehafteter Short (16 Bit) Integer-Vektor |
QRhiVertexInputAttribute::SShort3 | 24 | Vorzeichenbehafteter Dreikomponenten-Kurzschlussvektor (16 Bit) Ganzzahlvektor |
QRhiVertexInputAttribute::SShort2 | 25 | Zweikomponenten-Vektor mit vorzeichenbehafteter Kurzzahl (16 Bit) Ganzzahl |
QRhiVertexInputAttribute::SShort | 26 | Vorzeichenbehaftete 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.