QRhiShaderResourceBinding Class
Beschreibt die Shader-Ressource für einen einzelnen Bindungspunkt. 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 |
Öffentliche Typen
| enum | StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage } |
| flags | StageFlags |
| enum | Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore } |
Öffentliche Funktionen
| QRhiShaderResourceBinding() | |
| bool | isLayoutCompatible(const QRhiShaderResourceBinding &other) const |
Statische öffentliche Mitglieder
| QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler) |
| QRhiShaderResourceBinding | sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers) |
| QRhiShaderResourceBinding | sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler) |
| QRhiShaderResourceBinding | texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex) |
| QRhiShaderResourceBinding | textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex) |
| QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size) |
Verwandte Nicht-Mitglieder
| size_t | qHash(const QRhiShaderResourceBinding &key, size_t seed = 0) |
| bool | operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
| bool | operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
Ausführliche Beschreibung
Ein `QRhiShaderResourceBinding` kann nicht direkt instanziiert werden. Verwenden Sie stattdessen statische Funktionen wie ` uniformBuffer()` oder ` sampledTexture()`, um eine Instanz zu erhalten.
Hinweis: Hierbei handelt es sich um eine RHI-API mit eingeschränkten Kompatibilitätsgarantien; weitere Informationen finden Sie unter QRhi.
Dokumentation zu den Mitgliedstypen
enum QRhiShaderResourceBinding::StageFlag
flags QRhiShaderResourceBinding::StageFlags
Flag-Werte, die angeben, in welchen Phasen die Shader-Ressource sichtbar ist
| Konstante | Wert | Beschreibung |
|---|---|---|
QRhiShaderResourceBinding::VertexStage | 1 << 0 | Vertex-Phase |
QRhiShaderResourceBinding::TessellationControlStage | 1 << 1 | Tessellationssteuerung (Hull-Shader)-Phase |
QRhiShaderResourceBinding::TessellationEvaluationStage | 1 << 2 | Tessellationsauswertungsphase (Domain-Shader) |
QRhiShaderResourceBinding::FragmentStage | 1 << 4 | Fragment-Stufe (Pixel-Shader) |
QRhiShaderResourceBinding::ComputeStage | 1 << 5 | Berechnungsstufe |
QRhiShaderResourceBinding::GeometryStage | 1 << 3 | Geometrie-Stufe |
Der Typ „StageFlags“ ist ein Typedef für „QFlags<StageFlag>“. Er speichert eine ODER-Kombination von „StageFlag“-Werten.
enum QRhiShaderResourceBinding::Type
Gibt den Typ der an einen Bindungspunkt gebundenen Shader-Ressource an
| Konstante | Wert | Beschreibung |
|---|---|---|
QRhiShaderResourceBinding::UniformBuffer | 0 | Uniform-Puffer |
QRhiShaderResourceBinding::SampledTexture | 1 | Kombinierter Bild-Sampler (ein Paar aus Textur und Sampler). Selbst wenn die mit der zugrunde liegenden 3D-API verbundene Shading-Sprache dieses Konzept nicht unterstützt (z. B. D3D und HLSL), wird es dennoch unterstützt, da die Shader-Übersetzungsschicht die entsprechende Übersetzung und Neuzuordnung von Bindungspunkten oder Shader-Registern übernimmt. |
QRhiShaderResourceBinding::Texture | 2 | Textur (separat) |
QRhiShaderResourceBinding::Sampler | 3 | Sampler (separat) |
QRhiShaderResourceBinding::ImageLoad | 4 | Bildladen (bei GLSL entspricht dies der Ausführung von ` imageLoad()` auf einer einzelnen Ebene – und entweder einer oder allen Ebenen – einer Textur, die dem Shader als Bildobjekt zur Verfügung gestellt wird) |
QRhiShaderResourceBinding::ImageStore | 5 | Bildspeicherung (bei GLSL entspricht dies dem Aufruf von ` imageStore()` oder `imageAtomic*()` auf einer einzelnen Ebene – und entweder einer oder allen Ebenen – einer Textur, die dem Shader als Bildobjekt zur Verfügung gestellt wird) |
QRhiShaderResourceBinding::ImageLoadStore | 6 | Bild laden und speichern |
QRhiShaderResourceBinding::BufferLoad | 7 | Laden aus dem Speicherpuffer (entspricht in GLSL dem Lesen aus einem Shader-Speicherpuffer) |
QRhiShaderResourceBinding::BufferStore | 8 | Speicherpuffer-Schreiben (entspricht in GLSL dem Schreiben in einen Shader-Speicherpuffer) |
QRhiShaderResourceBinding::BufferLoadStore | 9 | Laden und Speichern von Speicherpuffern |
Dokumentation der Mitgliedsfunktionen
[constexpr noexcept default] QRhiShaderResourceBinding::QRhiShaderResourceBinding()
Erstellt standardmäßig eine Instanz von ` QRhiShaderResourceBinding`.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für einen schreibgeschützten Speicherpuffer mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück.
Hinweis: Wenn „ buf “ nicht null ist, muss die „ QRhiBuffer::StorageBuffer “ mit „ “ erstellt worden sein.
Hinweis: „ buf “ kann null sein. Es ist zulässig, ein „ QRhiShaderResourceBindings “ mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit „ QRhiCommandBuffer::setShaderResources()“ verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen „ QRhiShaderResourceBindings “ verwendet werden, dessen vorhandene Ressourcen an „ QRhiCommandBuffer::setShaderResources()“ übergeben werden.
Hinweis: Das Laden/Speichernvon Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Zwar unterstützen einige Backends die Verwendung dieser Ressourcen möglicherweise auch in einer Grafik-Pipeline, dies wird jedoch nicht universell unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme im Zusammenhang mit Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Compute-Shadern.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Gibt eine Shader-Ressourcenbindung für einen schreibgeschützten Speicherpuffer mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück. Diese Überladung bindet nur einen Bereich, wie durch „ offset “ und „ size “ festgelegt.
Hinweis: Wenn „ buf “ nicht null ist, muss die Speicherressource mit „ QRhiBuffer::StorageBuffer “ erstellt worden sein.
Hinweis: ` buf ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, aber ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Das Laden und Speichernvon Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Zwar unterstützen einige Backends die Verwendung dieser Ressourcen möglicherweise auch in einer Grafik-Pipeline, dies wird jedoch nicht universell unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme im Zusammenhang mit Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Compute-Shadern.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für einen Lese-/Schreib-Speicherpuffer mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück.
Hinweis: Wenn „ buf “ nicht null ist, muss die „ QRhiBuffer::StorageBuffer “ mit „ “ erstellt worden sein.
Hinweis: „ buf “ kann null sein. Es ist zulässig, ein „ QRhiShaderResourceBindings “ mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit „ QRhiCommandBuffer::setShaderResources()“ verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen „ QRhiShaderResourceBindings “ verwendet werden, dessen vorhandene Ressourcen an „ QRhiCommandBuffer::setShaderResources()“ übergeben werden.
Hinweis: Das Laden/Speichernvon Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Zwar unterstützen einige Backends die Verwendung dieser Ressourcen möglicherweise auch in einer Grafik-Pipeline, dies ist jedoch nicht allgemein unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme im Zusammenhang mit Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Compute-Shadern.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Gibt eine Shader-Ressourcenbindung für einen Lese-/Schreib-Speicherpuffer mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück. Diese Überladung bindet nur einen Bereich, wie durch „ offset “ und „ size “ festgelegt.
Hinweis: Wenn buf nicht null ist, muss sie mit QRhiBuffer::StorageBuffer erstellt worden sein.
Hinweis: „ buf “ kann null sein. Es ist zulässig, ein „ QRhiShaderResourceBindings “ mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit „ QRhiCommandBuffer::setShaderResources()“ verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen „ QRhiShaderResourceBindings “ verwendet werden, dessen vorhandene Ressourcen an „ QRhiCommandBuffer::setShaderResources()“ übergeben werden.
Hinweis: Das Laden/Speichernvon Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Zwar unterstützen einige Backends die Verwendung dieser Ressourcen möglicherweise auch in einer Grafik-Pipeline, dies wird jedoch nicht universell unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme im Zusammenhang mit Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Compute-Shadern.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für einen schreibgeschützten Speicherpuffer mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück.
Hinweis: Wenn „ buf “ nicht null ist, muss die „ QRhiBuffer::StorageBuffer “ mit „ “ erstellt worden sein.
Hinweis: ` buf ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, jedoch kann ein solches Objekt nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Das Laden/Speichernvon Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Zwar unterstützen einige Backends die Verwendung dieser Ressourcen möglicherweise auch in einer Grafik-Pipeline, dies wird jedoch nicht universell unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme im Zusammenhang mit Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Compute-Shadern.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Gibt eine Shader-Ressourcenbindung für einen schreibgeschützten Speicherpuffer mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück. Diese Überladung bindet nur einen Bereich, wie durch „ offset “ und „ size “ angegeben.
Hinweis: Wenn ` buf ` nicht null ist, muss der Speicherpuffer mit ` QRhiBuffer::StorageBuffer` erstellt worden sein.
Hinweis: ` buf ` kann null sein. Es ist zulässig, eine ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, deren vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Das Laden/Speichernin den Puffer ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Zwar unterstützen einige Backends die Verwendung dieser Ressourcen möglicherweise auch in einer Grafik-Pipeline, dies wird jedoch nicht universell unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme im Zusammenhang mit Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Compute-Shadern.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
Gibt eine Shader-Ressourcenbindung für ein schreibgeschütztes Speicherbild mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück. Die Bildladevorgänge haben Zugriff auf alle Ebenen der angegebenen „ level “. (Wenn es sich bei der Textur also um eine Cubemap handelt, muss der Shader „imageCube“ anstelle von „image2D“ verwenden.)
Hinweis: Wenn „ tex “ nicht null ist, muss es mit „ QRhiTexture::UsedWithLoadStore “ erstellt worden sein.
Hinweis: ` tex ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, aber ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Das Laden und Speichernvon Bildern ist nur innerhalb der Compute- und Fragment-Phasen verfügbar.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
Gibt eine Shader-Ressourcenbindung für ein Lese-/Schreib-Speicherbild mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück. Die Lade- und Speichervorgänge des Bildes haben Zugriff auf alle Ebenen des angegebenen „ level “. (Wenn es sich bei der Textur also um eine Cubemap handelt, muss der Shader „imageCube“ anstelle von „image2D“ verwenden.)
Hinweis: Wenn „ tex “ nicht null ist, muss es mit „ QRhiTexture::UsedWithLoadStore “ erstellt worden sein.
Hinweis: „ tex “ kann null sein. Es ist zulässig, ein „ QRhiShaderResourceBindings “ mit nicht spezifizierten Ressourcen zu erstellen, jedoch kann ein solches Objekt nicht mit „ QRhiCommandBuffer::setShaderResources()“ verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen „ QRhiShaderResourceBindings “ verwendet werden, dessen vorhandene Ressourcen an „ QRhiCommandBuffer::setShaderResources()“ übergeben werden.
Hinweis: Das Laden und Speichernvon Bildern ist nur innerhalb der Compute- und Fragment-Stufen verfügbar.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
Gibt eine Shader-Ressourcenbindung für ein schreibgeschütztes Speicherbild mit der angegebenen Nummer „ binding “ und der Pipeline „ stage “ zurück. Die Bildspeicheroperationen haben Zugriff auf alle Ebenen des angegebenen „ level “. (Wenn es sich bei der Textur also um eine Cubemap handelt, muss der Shader „imageCube“ anstelle von „image2D“ verwenden.)
Hinweis: Wenn „ tex “ nicht null ist, muss es mit „ QRhiTexture::UsedWithLoadStore “ erstellt worden sein.
Hinweis: ` tex ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, aber ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Das Laden und Speichernvon Bildern ist nur innerhalb der Compute- und Fragment-Phasen verfügbar.
bool QRhiShaderResourceBinding::isLayoutCompatible(const QRhiShaderResourceBinding &other) const
Gibt „ true “ zurück, wenn das Layout mit „ other “ kompatibel ist. Das Layout umfasst weder die eigentliche Ressource (z. B. Puffer oder Textur) noch zugehörige Parameter (z. B. Offset oder Größe).
Beispielsweise sind die folgenden Werte „ a “ und „ b “ zwar nicht gleich, aber hinsichtlich des Layouts kompatibel:
auto a = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buffer);
auto b = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, someOtherBuffer, 256);[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen sowie die Textur und den Sampler zurück, die durch binding, stage, tex und sampler festgelegt werden.
Hinweis: Diese Funktion entspricht dem Aufruf von ` sampledTextures()` mit einem ` count ` von 1.
Hinweis: „ tex “ und „ sampler “ können den Wert „null“ annehmen. Es ist zulässig, ein „ QRhiShaderResourceBindings “-Objekt mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit „ QRhiCommandBuffer::setShaderResources()“ verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann stets zusammen mit einem anderen, layoutkompatiblen „ QRhiShaderResourceBindings “-Objekt verwendet werden, dessen vorhandene Ressourcen an „ QRhiCommandBuffer::setShaderResources()“ übergeben werden.
Hinweis: Ein Shader kann je nach zugrunde liegender Grafik-API möglicherweise nicht mehr als 16 Texturen/Sampler verarbeiten. Diese feste Obergrenze muss beim Entwurf des Renderers berücksichtigt werden. Dies gilt nicht für Textur-Arrays, die einen einzigen Bindungspunkt (Shader-Register) belegen und je nach zugrunde liegender Grafik-API 256 bis 2048 Texturen enthalten können. Arrays von Texturen (siehe sampledTextures()) unterscheiden sich in dieser Hinsicht jedoch nicht von der Verwendung der gleichen Anzahl einzelner Texturen.
Siehe auch sampledTextures().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und das Array von Textur-Sampler-Paaren zurück, das durch binding, stage, count und texSamplers festgelegt wird.
Hinweis: ` count ` muss mindestens 1 und darf nicht größer als 16 sein.
Hinweis: Wenn count den Wert 1 hat, entspricht diese Funktion der Funktion sampledTexture().
Diese Funktion ist relevant, wenn Arrays aus kombinierten Bild-Samplern beteiligt sind. Beispielsweise deklariert in GLSL „ layout(binding = 5) uniform sampler2D shadowMaps[8]; “ ein Array aus kombinierten Bild-Samplern. Von der Anwendung wird dann erwartet, dass sie einen „ QRhiShaderResourceBinding “ für den Bindungspunkt 5 bereitstellt, der durch den Aufruf dieser Funktion mit einem auf 8 gesetzten „ count “ sowie einer gültigen Textur und einem gültigen Sampler für jedes Element des Arrays eingerichtet wird.
count Warnung: Alle Elemente des Arrays müssen angegeben werden. Im obigen Beispiel ist der einzige gültige, portierbare Ansatz der Aufruf dieser Funktion mit einem „ QRhiTexture “ von 8. Zudem müssen alle „ “- und „ QRhiSampler “-Instanzen gültig sein, d. h. „nullptr“ ist kein zulässiger Wert. Dies liegt daran, dass einige der zugrunde liegenden APIs, wie beispielsweise Vulkan, für jedes Element in Deskriptor-Arrays ein gültiges Bild- und Sampler-Objekt erfordern. Anwendungen wird empfohlen, „Dummy“-Sampler und -Texturen bereitzustellen, falls einige Array-Elemente nicht relevant sind (da im Shader nicht darauf zugegriffen wird).
Hinweis: ` texSamplers ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, aber ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Siehe auch sampledTexture().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und den durch binding, stage und sampler festgelegten Sampler zurück.
Hinweis: ` sampler ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, aber ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Arrays aus einzelnen Samplern werden nicht unterstützt.
Dies erstellt eine Bindung für ein einzelnes Sampler-Objekt, während sampledTexture() für kombinierte Bild-Sampler geeignet ist. In Vulkan-kompatiblem GLSL-Code werden einzelne Sampler als sampler im Gegensatz zu sampler2D deklariert: layout(binding = 2) uniform sampler samp;
Sind sowohl ein „ texture2D “ als auch ein „ sampler “ vorhanden, können sie gemeinsam zum Abtasten der Textur verwendet werden: „ fragColor = texture(sampler2D(tex, samp), texcoord); “.
Hinweis: Je nach der zugrunde liegenden Grafik-API kannein Shader möglicherweise nicht mehr als 16 Sampler nutzen. Diese feste Obergrenze muss beim Entwurf des Renderers berücksichtigt werden.
Siehe auch texture().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und die Textur zurück, die durch binding, stage und tex festgelegt sind.
Hinweis: Diese Funktion entspricht dem Aufruf von ` textures()` mit einem ` count ` von 1.
Hinweis: ` tex ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Dies erstellt eine Bindung für ein separates Textur- (Bild-)Objekt, während sampledTexture() für kombinierte Bild-Sampler geeignet ist. In Vulkan-kompatiblem GLSL-Code werden separate Texturen als texture2D deklariert, im Gegensatz zu sampler2D: layout(binding = 1) uniform texture2D tex;
Hinweis: Je nach zugrunde liegender Grafik-API kannein Shader möglicherweise nicht mehr als 16 Texturen verarbeiten. Diese feste Obergrenze muss beim Entwurf des Renderers berücksichtigt werden. Dies gilt nicht für Textur-Arrays, die einen einzigen Bindungspunkt (Shader-Register) belegen und je nach zugrunde liegender Grafik-API 256 bis 2048 Texturen enthalten können. Arrays von Texturen (siehe sampledTextures()) unterscheiden sich in dieser Hinsicht jedoch nicht von der Verwendung derselben Anzahl einzelner Texturen.
Siehe auch textures() und sampler().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und das Array aus (separaten) Texturen zurück, die durch binding, stage, count und tex angegeben werden.
Hinweis: count muss mindestens 1 und darf nicht größer als 16 sein.
Hinweis: Wenn count den Wert 1 hat, entspricht diese Funktion der Funktion texture().
Warnung: Alle Elemente des Arrays müssen angegeben werden.
Hinweis: „ tex “ kann null sein. Es ist zulässig, ein „ QRhiShaderResourceBindings “ mit nicht angegebenen Ressourcen zu erstellen, jedoch kann ein solches Objekt nicht mit „ QRhiCommandBuffer::setShaderResources()“ verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen „ QRhiShaderResourceBindings “ verwendet werden, dessen vorhandene Ressourcen an „ QRhiCommandBuffer::setShaderResources()“ übergeben werden.
Siehe auch texture() und sampler().
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und den Puffer zurück, die durch „ binding “, „ stage “ und „ buf “ festgelegt sind.
Hinweis: Wenn ` buf ` nicht null ist, muss es mit ` QRhiBuffer::UniformBuffer` erstellt worden sein.
Hinweis: buf kann null sein. Es ist zulässig, ein QRhiShaderResourceBindings mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit QRhiCommandBuffer::setShaderResources() verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen QRhiShaderResourceBindings verwendet werden, dessen vorhandene Ressourcen an QRhiCommandBuffer::setShaderResources() übergeben werden.
Hinweis: Wenn die Größe von „ buf “ die für „ QRhi::MaxUniformBufferRange “ angegebene Grenze überschreitet, können unerwartete Fehler auftreten.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und den Puffer zurück, die durch binding, stage und buf festgelegt sind. Diese Überladung bindet nur einen Bereich, wie durch offset und size angegeben.
Hinweis: Es obliegt dem Benutzer, sicherzustellen, dass der Offset an QRhi::ubufAlignment() ausgerichtet ist.
Hinweis: ` size ` muss größer als 0 sein.
Hinweis: Wenn ` buf ` nicht null ist, muss es mit ` QRhiBuffer::UniformBuffer` erstellt worden sein.
Hinweis: ` buf ` kann `null` sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Wenn „ size “ den für „ QRhi::MaxUniformBufferRange “ angegebenen Grenzwert überschreitet, können unerwartete Fehler auftreten.
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipeline-Stufen und den durch binding, stage und buf festgelegten Puffer zurück. Es wird davon ausgegangen, dass der Uniform-Puffer einen dynamischen Offset aufweist. Der dynamische Offset kann in ` QRhiCommandBuffer::setShaderResources()` angegeben werden, wodurch die Verwendung variierender Offset-Werte möglich ist, ohne dass neue Bindungen für den Puffer erstellt werden müssen. Die Größe des gebundenen Bereichs wird durch ` size` festgelegt. Wie bei nicht-dynamischen Offsets darf ` offset + size ` die Größe von ` buf` nicht überschreiten.
Hinweis: Wenn buf nicht null ist, muss es mit QRhiBuffer::UniformBuffer erstellt worden sein.
Hinweis: ` buf ` kann null sein. Es ist zulässig, ein ` QRhiShaderResourceBindings ` mit nicht spezifizierten Ressourcen zu erstellen, doch ein solches Objekt kann nicht mit ` QRhiCommandBuffer::setShaderResources()` verwendet werden. Es eignet sich jedoch zum Erstellen von Pipelines. Eine solche Pipeline muss dann immer zusammen mit einem anderen, layoutkompatiblen ` QRhiShaderResourceBindings ` verwendet werden, dessen vorhandene Ressourcen an ` QRhiCommandBuffer::setShaderResources()` übergeben werden.
Hinweis: Wenn „ size “ die für „ QRhi::MaxUniformBufferRange “ angegebene Grenze überschreitet, können unerwartete Fehler auftreten.
Verwandte Nicht-Mitglieder
[noexcept] size_t qHash(const QRhiShaderResourceBinding &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 QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
Gibt „ false “ zurück, wenn alle Zuordnungen in den beiden „ QRhiShaderResourceBinding “-Objekten „ a “ und „ b “ identisch sind; andernfalls wird „ true “ zurückgegeben.
[noexcept] bool operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
Gibt „ true “ zurück, wenn der Inhalt der beiden Objekte vom Typ „ QRhiShaderResourceBinding “ – „ a “ und „ b “ – identisch ist. Dies umfasst sowohl die Ressourcen (Puffer, Textur) als auch die zugehörigen Parameter (Offset, Größe). Um nur die Layouts (Bindungspunkt, Pipeline-Stufe, Ressourcentyp) zu vergleichen, verwenden Sie stattdessen „ isLayoutCompatible()“.
© 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.