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 srbDabei 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 srb2Hinweis: 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.