Auf dieser Seite

QRhiShaderResourceBindings Class

Fasst Ressourcen zusammen, um Puffer-, Textur- und Sampler-Ressourcen für Shader sichtbar zu machen. Mehr...

Header: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Seit: Qt 6.6
Erbt von: QRhiResource

Öffentliche Funktionen

const QRhiShaderResourceBinding *bindingAt(qsizetype index) const
qsizetype bindingCount() const
const QRhiShaderResourceBinding *cbeginBindings() const
const QRhiShaderResourceBinding *cendBindings() const
virtual bool create() = 0
bool isLayoutCompatible(const QRhiShaderResourceBindings *other) const
QVector<quint32> serializedLayoutDescription() const
void setBindings(std::initializer_list<QRhiShaderResourceBinding> list)
void setBindings(InputIterator first, InputIterator last)

Neu implementierte öffentliche Funktionen

virtual QRhiResource::Type resourceType() const override

Ausführliche Beschreibung

Ein „QRhiShaderResourceBindings“-Objekt ist eine Sammlung von „ QRhiShaderResourceBinding “-Objekten, von denen jedes eine einzelne Bindung beschreibt.

Nehmen wir einen Fragment-Shader mit der folgenden Schnittstelle:

layout(std140, binding = 0) uniform buf {
    mat4 mvp;
    int flip;
} ubuf;

layout(binding = 1) uniform sampler2D tex;

Um Ressourcen für den Shader sichtbar zu machen, könnten die folgenden „QRhiShaderResourceBindings“ erstellt und anschließend an „ QRhiGraphicsPipeline::setShaderResourceBindings()“ übergeben werden:

QRhiShaderResourceBindings *srb = rhi->newShaderResourceBindings();
srb->setBindings({
    QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, ubuf),
    QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture, sampler)
});
srb->create();
// ...
QRhiGraphicsPipeline *ps = rhi->newGraphicsPipeline();
// ...
ps->setShaderResourceBindings(srb);
ps->create();
// ...
cb->setGraphicsPipeline(ps);
cb->setShaderResources(); // binds srb

Dabei wird davon ausgegangen, dass „ ubuf “ ein „ QRhiBuffer “ ist, „ texture “ ein „ QRhiTexture “ ist und „ sampler “ ein „ QRhiSampler “ ist. Das Beispiel geht außerdem davon aus, dass der Uniform-Block auch im Vertex-Shader vorhanden ist, sodass derselbe Puffer auch für die Vertex-Stufe sichtbar gemacht wird.

Erweiterte Anwendung

Aufbauend auf dem obigen Beispiel nehmen wir an, dass ein Durchlauf nun genau dieselbe Pipeline und dieselben Shader mit einer anderen Textur verwenden muss. Ein komplett separates „ QRhiGraphicsPipeline “ nur für diesen Zweck zu erstellen, wäre übertrieben. Aus diesem Grund ermöglicht „ QRhiCommandBuffer::setShaderResources()“ die Angabe eines „ srb “-Arguments. Solange die Layouts (also die Anzahl der Bindungen und die Bindungspunkte) zwischen zwei `QRhiShaderResourceBindings` übereinstimmen, können beide mit derselben Pipeline verwendet werden, vorausgesetzt, die Pipeline wurde ursprünglich mit einem von ihnen erstellt. Weitere Details finden Sie unter ` isLayoutCompatible()`.

QRhiShaderResourceBindings *srb2 = rhi->newShaderResourceBindings();
// ...
cb->setGraphicsPipeline(ps);
cb->setShaderResources(srb2); // binds srb2

Hinweis: Hierbei handelt es sich um eine RHI-API mit eingeschränkten Kompatibilitätsgarantien; weitere Informationen finden Sie unter QRhi.

Dokumentation der Member-Funktionen

const QRhiShaderResourceBinding *QRhiShaderResourceBindings::bindingAt(qsizetype index) const

Gibt die Bindung an der angegebenen Adresse ` index` zurück.

qsizetype QRhiShaderResourceBindings::bindingCount() const

Gibt die Anzahl der Bindungen zurück.

const QRhiShaderResourceBinding *QRhiShaderResourceBindings::cbeginBindings() const

Gibt einen const-Iterator zurück, der auf das erste Element der Bindungsliste zeigt.

const QRhiShaderResourceBinding *QRhiShaderResourceBindings::cendBindings() const

Gibt einen konstanten Iterator zurück, der direkt auf die Position nach dem letzten Element der Bindungsliste zeigt.

[pure virtual] bool QRhiShaderResourceBindings::create()

Erstellt den entsprechenden Ressourcenbindungen-Satz. Je nach der zugrunde liegenden Grafik-API kann dies die Erstellung nativer Grafikressourcen beinhalten; daher sollte nicht davon ausgegangen werden, dass dies ein ressourcenschonender Vorgang ist.

Wurde `create()` zuvor ohne entsprechende ` destroy()` aufgerufen, wird zunächst implizit ` destroy()` aufgerufen.

Gibt bei Erfolg ` true ` zurück, bei einem Fehler ` false `. Unabhängig vom Rückgabewert ist der Aufruf von ` destroy()` stets sicher.

bool QRhiShaderResourceBindings::isLayoutCompatible(const QRhiShaderResourceBindings *other) const

Gibt „ true “ zurück, wenn das Layout mit „ other “ kompatibel ist. Das Layout enthält weder die eigentliche Ressource (z. B. Puffer oder Textur) noch zugehörige Parameter (z. B. Offset oder Größe). Es umfasst jedoch den Bindungspunkt, die Pipeline-Stufe und den Ressourcentyp. Auch die Anzahl und Reihenfolge der Bindungen müssen übereinstimmen, damit Kompatibilität gegeben ist.

Wenn ein „ QRhiGraphicsPipeline “ mit diesem „ QRhiShaderResourceBindings “ erstellt wurde und die Funktion „ true “ zurückgibt, kann „ other “ dann sicher an „ QRhiCommandBuffer::setShaderResources()“ übergeben und somit anstelle dieses „ QRhiShaderResourceBindings “ mit der Pipeline verwendet werden.

Hinweis: Diese Funktion darf nur nach einem erfolgreichen Aufruf von ` create()` aufgerufen werden, da sie auf Daten zurückgreift, die beim „Baking“ der zugrunde liegenden Datenstrukturen generiert wurden. Auf diese Weise kann die Funktion einen Vergleichsansatz implementieren, der effizienter ist als das Durchlaufen zweier Bindungslisten und das Aufrufen von ` QRhiShaderResourceBinding::isLayoutCompatible()` für jedes Paar. Dies ist insbesondere dann relevant, wenn diese Funktion mit hoher Frequenz aufgerufen wird.

Siehe auch serializedLayoutDescription().

[override virtual] QRhiResource::Type QRhiShaderResourceBindings::resourceType() const

Implementiert neu: ` QRhiResource::resourceType()` const.

Gibt den Ressourcentyp zurück.

QVector<quint32> QRhiShaderResourceBindings::serializedLayoutDescription() const

Gibt einen Vektor aus Ganzzahlen zurück, der einen undurchsichtigen Blob enthält, der das Layout der Bindungsliste beschreibt, d. h. die für layout compatibility tests relevanten Daten.

Sind zwei Objekte srb1 und srb2 gegeben, gilt: Sind die von dieser Funktion zurückgegebenen Daten identisch, dann gilt srb1->isLayoutCompatible(srb2), und umgekehrt gilt ebenfalls.

Hinweis: Die zurückgegebenen Daten sind für die Speicherung im Arbeitsspeicher und für Vergleiche während der Lebensdauer des Objekts QRhi bestimmt, zu dem das Objekt gehört. Sie sind nicht für die Speicherung auf Festplatte, die Wiederverwendung zwischen Prozessen oder die Verwendung mit mehreren QRhi -Instanzen mit potenziell unterschiedlichen Backends vorgesehen.

Siehe auch ` isLayoutCompatible()`.

void QRhiShaderResourceBindings::setBindings(std::initializer_list<QRhiShaderResourceBinding> list)

Legt die „ list “ der Bindungen fest.

template <typename InputIterator> void QRhiShaderResourceBindings::setBindings(InputIterator first, InputIterator last)

Legt die Liste der Zuordnungen aus den Iteratoren „ first “ und „ last “ fest.

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