QRhiShaderResourceBinding Class
Beschreibt die Shader-Ressource für einen einzelnen Bindungspunkt. 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 | StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage } |
flags | StageFlags |
enum | Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore } |
Öffentliche Funktionen
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) |
Detaillierte Beschreibung
Eine QRhiShaderResourceBinding kann nicht direkt erstellt werden. Verwenden Sie stattdessen die statischen Funktionen wie uniformBuffer() oder sampledTexture(), um eine Instanz zu erhalten.
Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.
Dokumentation der Mitgliedstypen
enum QRhiShaderResourceBinding::StageFlag
flags QRhiShaderResourceBinding::StageFlags
Flag-Werte, die angeben, in welchen Stadien die Shader-Ressource sichtbar ist
Konstante | Wert | Beschreibung |
---|---|---|
QRhiShaderResourceBinding::VertexStage | 1 << 0 | Vertex-Stufe |
QRhiShaderResourceBinding::TessellationControlStage | 1 << 1 | Stufe der Tesselierungssteuerung (Hull-Shader) |
QRhiShaderResourceBinding::TessellationEvaluationStage | 1 << 2 | Tesselation-Auswertung (Domain-Shader) Stufe |
QRhiShaderResourceBinding::FragmentStage | 1 << 4 | Fragmentierungsstufe (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 Shader-Ressource an, die an einen Bindungspunkt gebunden ist
Konstante | Wert | Beschreibung |
---|---|---|
QRhiShaderResourceBinding::UniformBuffer | 0 | Einheitlicher Puffer |
QRhiShaderResourceBinding::SampledTexture | 1 | Kombinierter Bildsampler (ein Textur- und Samplerpaar). Selbst wenn die mit der zugrundeliegenden 3D-API verknüpfte Shading-Sprache dieses Konzept nicht unterstützt (z. B. D3D und HLSL), wird es dennoch unterstützt, da die Shader-Übersetzungsschicht für die entsprechende Übersetzung und Neuzuordnung von Bindungspunkten oder Shader-Registern sorgt. |
QRhiShaderResourceBinding::Texture | 2 | Textur (separat) |
QRhiShaderResourceBinding::Sampler | 3 | Sampler (separat) |
QRhiShaderResourceBinding::ImageLoad | 4 | Laden von Bildern (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 vorliegt) |
QRhiShaderResourceBinding::ImageStore | 5 | Bildspeicherung (mit GLSL entspricht dies der Ausführung von imageStore() oder imageAtomic*() auf einer einzelnen Ebene - und entweder einer oder allen Ebenen - einer Textur, die dem Shader als Bildobjekt vorliegt) |
QRhiShaderResourceBinding::ImageLoadStore | 6 | Laden und Speichern von Bildern |
QRhiShaderResourceBinding::BufferLoad | 7 | Speicherpuffer speichern (mit GLSL entspricht dies dem Lesen aus einem Shader-Speicherpuffer) |
QRhiShaderResourceBinding::BufferStore | 8 | Speicherpuffer speichern (mit GLSL entspricht dies dem Schreiben in einen Shader-Speicherpuffer) |
QRhiShaderResourceBinding::BufferLoadStore | 9 | Speicherpuffer laden und speichern |
Dokumentation der Mitgliedsfunktionen
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für einen Nur-Lese-Speicherpuffer mit der angegebenen binding Nummer und Pipeline stage zurück.
Hinweis: Wenn buf nicht null ist, muss es 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Gibt eine Shader-Ressourcenbindung für einen Nur-Lese-Speicherpuffer mit der angegebenen binding Nummer und Pipeline stage zurück. Diese Überladung bindet nur eine Region, wie durch offset und size angegeben.
Hinweis: Wenn buf nicht null ist, muss es 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für einen Schreib-Lese-Speicherpuffer mit der angegebenen binding Nummer und Pipeline stage zurück.
Hinweis: Wenn buf nicht null ist, muss er 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
Gibt eine Shader-Ressourcenbindung für einen Schreib-Lese-Speicherpuffer mit der angegebenen binding Nummer und Pipeline stage zurück. Diese Überladung bindet nur eine Region, wie durch offset und size angegeben.
Hinweis: Wenn buf nicht null ist, muss es 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
Gibt eine Shader-Ressourcenbindung für einen schreibgeschützten Speicherpuffer mit der angegebenen binding Nummer und Pipeline stage zurück.
Hinweis: Wenn buf nicht null ist, muss er 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen können, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[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 binding Nummer und Pipeline stage zurück. Diese Überladung bindet nur eine Region, wie durch offset und size angegeben.
Hinweis: Wenn buf nicht null ist, muss er 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Puffern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[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 binding Nummer und Pipeline stage zurück. Die Bildladeoperationen haben Zugriff auf alle Ebenen des angegebenen level. (wenn die Textur also eine Cubemap ist, 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Bildern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[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 binding Nummer und Pipeline stage zurück. Die Lade-/Speicheroperationen des Bildes haben Zugriff auf alle Ebenen des angegebenen level. (wenn die Textur also eine Cubemap ist, muss der Shader imageCube statt 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Bildern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
[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 binding Nummer und Pipeline stage zurück. Die Bildspeicheroperationen haben Zugriff auf alle Ebenen des angegebenen level. (wenn die Textur also eine Cubemap ist, muss der Shader imageCube statt 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Das Laden/Speichern von Bildern ist nur innerhalb einer Compute-Pipeline garantiert verfügbar. Während einige Backends die Verwendung dieser Ressourcen auch in einer Grafik-Pipeline unterstützen, wird dies nicht durchgängig unterstützt, und selbst wenn dies der Fall ist, können unerwartete Probleme in Bezug auf Barrieren und Synchronisation auftreten. Vermeiden Sie daher die Verwendung solcher Ressourcen mit anderen Shadern als Berechnungen.
bool QRhiShaderResourceBinding::isLayoutCompatible(const QRhiShaderResourceBinding &other) const
Gibt true
zurück, wenn das Layout mit other kompatibel ist. Das Layout enthält nicht die eigentliche Ressource (z. B. Puffer oder Textur) und die zugehörigen Parameter (z. B. Offset oder Größe).
Zum Beispiel sind a
und b
nicht gleich, aber vom Layout her 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 Pipelinestufen, die Textur und den Sampler zurück, die durch binding, stage, tex, sampler angegeben sind.
Hinweis: Diese Funktion ist gleichbedeutend mit dem Aufruf von sampledTextures() mit einem count
von 1.
Hinweis: tex und sampler können 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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Je nach zugrunde liegender Grafik-API kann ein Shader nicht mehr als 16 Texturen/Sampler verbrauchen. Diese harte Grenze muss beim Renderer-Design beachtet werden. Dies gilt nicht für Textur-Arrays, die einen einzigen Bindungspunkt (Shader-Register) verwenden und je nach zugrunde liegender Grafik-API 256-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, Pipeline-Stufen und das Array von Textur-Sampler-Paaren zurück, die durch binding, stage, count und texSamplers angegeben sind.
Hinweis: count muss mindestens 1 und darf nicht größer als 16 sein.
Hinweis: Wenn count gleich 1 ist, ist diese Funktion äquivalent zu sampledTexture().
Diese Funktion ist relevant, wenn es sich um Arrays von kombinierten Bildsamplern handelt. Zum Beispiel deklariert in GLSL layout(binding = 5) uniform sampler2D shadowMaps[8];
ein Array von kombinierten Bildsamplern. Von der Anwendung wird dann erwartet, dass sie eine QRhiShaderResourceBinding für den Bindungspunkt 5 bereitstellt, die durch den Aufruf dieser Funktion mit count auf 8 und einer gültigen Textur und einem Sampler für jedes Element des Arrays eingerichtet wird.
Achtung! Es müssen alle Elemente des Arrays angegeben werden. Bei dem obigen Beispiel ist der einzige gültige, portable Ansatz der Aufruf dieser Funktion mit einer count von 8. Außerdem müssen alle QRhiTexture und QRhiSampler Instanzen gültig sein, d.h. nullptr ist kein akzeptierter Wert. Dies ist auf einige der zugrundeliegenden APIs zurückzuführen, wie z. B. Vulkan, die für jedes Element in Deskriptor-Arrays ein gültiges Bild- und Sampler-Objekt erfordern. Anwendungen wird empfohlen, "Dummy"-Sampler und Texturen bereitzustellen, wenn einige Array-Elemente nicht relevant sind (weil auf sie im Shader nicht 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 ist jedoch geeignet, um Pipelines zu erstellen. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Siehe auch sampledTexture().
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)
Gibt eine Shader-Ressourcenbindung für die angegebene Bindungsnummer, die Pipelinestufen und den Sampler zurück, die durch binding, stage, sampler angegeben werden.
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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Arrays von separaten Samplern werden nicht unterstützt.
Dies erzeugt eine Bindung für ein separates Sampler-Objekt, während sampledTexture() für kombinierte Bild-Sampler geeignet ist. In Vulkan-kompatiblem GLSL-Code werden separate Sampler als sampler
deklariert, im Gegensatz zu sampler2D
: layout(binding = 2) uniform sampler samp;
Wenn sowohl ein texture2D
als auch ein sampler
vorhanden sind, können sie zusammen verwendet werden, um die Textur zu sampeln: fragColor = texture(sampler2D(tex, samp), texcoord);
.
Hinweis: Je nach der zugrunde liegenden Grafik-API kann ein Shader möglicherweise nicht mehr als 16 Sampler verwenden. Diese harte Grenze muss bei der Entwicklung von Renderern beachtet 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 Pipelinestufen und die Textur zurück, die durch binding, stage, tex angegeben sind.
Hinweis: Diese Funktion ist gleichbedeutend mit dem Aufruf von textures() mit einer count
von 1.
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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Dies erzeugt 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
im Gegensatz zu sampler2D
deklariert: layout(binding = 1) uniform texture2D tex;
Hinweis: Je nach der zugrunde liegenden Grafik-API kann ein Shader möglicherweise nicht mehr als 16 Texturen verwenden. Diese harte Grenze muss beim Design des Renderers beachtet werden. Dies gilt nicht für Textur-Arrays, die einen einzigen Bindungspunkt (Shader-Register) verwenden und je nach zugrunde liegender Grafik-API 256-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 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 von (separaten) Texturen zurück, die durch binding, stage, count und tex angegeben sind.
Hinweis: count muss mindestens 1 und darf nicht größer als 16 sein.
Hinweis: Wenn count gleich 1 ist, ist diese Funktion äquivalent zu texture().
Warnung: Es müssen alle Elemente des Arrays angegeben werden.
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 ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
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 Pipelinestufen und den Puffer zurück, die durch binding, stage und buf angegeben wurden.
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, aber ein solches Objekt kann nicht mit QRhiCommandBuffer::setShaderResources() verwendet werden. Es ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
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 Pipelinestufen und den Puffer zurück, die durch binding, stage und buf angegeben sind. Diese Überladung bindet nur eine Region, wie durch offset und size angegeben.
Hinweis: Der Benutzer muss sicherstellen, 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, aber ein solches Objekt kann nicht mit QRhiCommandBuffer::setShaderResources() verwendet werden. Es ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
Hinweis: Wenn size die für QRhi::MaxUniformBufferRange gemeldete Grenze ü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 Pipelinestufen und den durch binding, stage und buf angegebenen Puffer zurück. Es wird angenommen, dass der einheitliche Puffer einen dynamischen Offset hat. Der dynamische Offset kann in QRhiCommandBuffer::setShaderResources() angegeben werden, was die Verwendung variabler Offset-Werte ermöglicht, ohne neue Bindungen für den Puffer zu erstellen. Die Größe des gebundenen Bereichs wird durch size festgelegt. Wie bei nicht-dynamischen Offsets kann 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, aber ein solches Objekt kann nicht mit QRhiCommandBuffer::setShaderResources() verwendet werden. Es ist jedoch für die Erstellung von Pipelines geeignet. Eine solche Pipeline muss dann immer zusammen mit einer anderen, layoutkompatiblen QRhiShaderResourceBindings mit vorhandenen Ressourcen verwendet werden, die an QRhiCommandBuffer::setShaderResources() übergeben wird.
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 Bindungen in den beiden Objekten QRhiShaderResourceBinding a und b gleich 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 QRhiShaderResourceBinding a und b gleich ist. Dies gilt auch für die Ressourcen (Puffer, Textur) und die zugehörigen Parameter (Offset, Größe). Um nur Layouts zu vergleichen (Bindungspunkt, Pipelinestufe, Ressourcentyp), verwenden Sie stattdessen isLayoutCompatible().
© 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.