QRhiColorAttachment Class
Beschreibt die Einfarb-Zuordnung eines Renderziels. 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 Funktionen
| QRhiColorAttachment() | |
| QRhiColorAttachment(QRhiRenderBuffer *renderBuffer) | |
| QRhiColorAttachment(QRhiTexture *texture) | |
| int | layer() const |
| int | level() const |
(since 6.7) int | multiViewCount() const |
| QRhiRenderBuffer * | renderBuffer() const |
| int | resolveLayer() const |
| int | resolveLevel() const |
| QRhiTexture * | resolveTexture() const |
| void | setLayer(int layer) |
| void | setLevel(int level) |
(since 6.7) void | setMultiViewCount(int count) |
| void | setRenderBuffer(QRhiRenderBuffer *rb) |
| void | setResolveLayer(int layer) |
| void | setResolveLevel(int level) |
| void | setResolveTexture(QRhiTexture *tex) |
| void | setTexture(QRhiTexture *tex) |
| QRhiTexture * | texture() const |
Ausführliche Beschreibung
Ein Farb-Attachment ist entweder ein „ QRhiTexture “ oder ein „ QRhiRenderBuffer “. Ersteres, d. h. wenn „ texture()“ gesetzt ist, wird in den meisten Fällen verwendet. „QRhiColorAttachment“ wird üblicherweise in Kombination mit „ QRhiTextureRenderTargetDescription “ verwendet.
Hinweis: texture() und renderBuffer() können nicht gleichzeitig gesetzt werden (d. h., sie dürfen nicht gleichzeitig null sein).
Das Setzen von ` renderBuffer ` wird nur empfohlen, wenn Multisampling erforderlich ist. In der Praxis ist es besser, sich auf ` QRhi::MultisampleRenderBuffer ` zu verlassen als auf ` QRhi::MultisampleTexture `, da Ersteres in mehr Laufzeitkonfigurationen verfügbar ist (z. B. bei der Ausführung unter OpenGL ES 3.0, das zwar keine Multisample-Texturen unterstützt, aber Multisample-Renderbuffer).
Bei der Verwendung einer Textur ohne Multisampling geben „ layer()“ und „ level()“ die Zielschicht (Flächenindex „ 0-5 “ bei Cubemaps) und die Mip-Stufe an. Bei 3D-Texturen gibt „ layer()“ den Slice (ein 2D-Bild innerhalb der 3D-Textur) an, der gerendert werden soll. Bei Textur-Arrays ist „ layer()“ der Array-Index.
Wenn „ texture “ () oder „ renderBuffer “ () auf „multisample“ gesetzt ist, kann „ resolveTexture “ () optional festgelegt werden. Ist dies der Fall, werden die Samples am Ende des Render-Durchgangs automatisch in diese (nicht-multisample) Textur aufgelöst. Beim Rendern in Multisample-Renderbuffer ist dies die einzige Möglichkeit, aufgelösten, nicht-multisample-Inhalt aus diesen zu erhalten. Multisample-Texturen ermöglichen das Abtasten in Shadern, daher ist dies für sie lediglich eine Option.
Hinweis: Wenn die Auflösung aktiviert ist, werden die Multisample-Daten möglicherweise gar nicht geschrieben. Das bedeutet, dass die Multisample- texture() anschließend nicht mit Shadern zum Abtasten verwendet werden darf, wenn „ resolveTexture()“ gesetzt ist.
Hinweis: Hierbei handelt es sich um eine RHI-API mit eingeschränkten Kompatibilitätsgarantien; weitere Details finden Sie unter „ QRhi “.
Siehe auch ` QRhiTextureRenderTargetDescription`.
Dokumentation zu den Member-Funktionen
[constexpr noexcept default] QRhiColorAttachment::QRhiColorAttachment()
Erstellt eine leere Beschreibung für einen Farbanhang.
QRhiColorAttachment::QRhiColorAttachment(QRhiRenderBuffer *renderBuffer)
Erstellt eine Beschreibung für eine Farbzuordnung, die „ renderBuffer “ als zugehörigen Farbpuffer angibt.
QRhiColorAttachment::QRhiColorAttachment(QRhiTexture *texture)
Erstellt eine Beschreibung einer Farbzuordnung, die „ texture “ als zugehörigen Farbpuffer angibt.
int QRhiColorAttachment::layer() const
Gibt den Layer-Index zurück (Cubemap-Fläche oder Array-Layer). Standardwert: 0.
Siehe auch „ setLayer()“.
int QRhiColorAttachment::level() const
Gibt die Mip-Stufe zurück. Standardwert ist 0.
Siehe auch „ setLevel()“.
[since 6.7] int QRhiColorAttachment::multiViewCount() const
Gibt die aktuell festgelegte Anzahl von Ansichten zurück. Der Standardwert ist 0, was bedeutet, dass das Renderziel mit dieser Farbzuordnung nicht für das Multiview-Rendering verwendet wird.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch ` setMultiViewCount()`.
QRhiRenderBuffer *QRhiColorAttachment::renderBuffer() const
Gibt den Renderbuffer zurück, auf den sich diese Attachment-Beschreibung bezieht, oder nullptr, falls keiner vorhanden ist.
In der Praxis ist die Verknüpfung eines „ QRhiRenderBuffer “ mit einem „ QRhiColorAttachment “ am sinnvollsten, wenn Multisample-Rendering über einen Multisample-Renderbuffer („ color “) eingerichtet wird, der am Ende des Renderdurchgangs in eine Nicht-Multisample-Textur aufgelöst wird.
Siehe auch setRenderBuffer().
int QRhiColorAttachment::resolveLayer() const
Gibt die aktuell eingestellte Textur-Auflösungs-Ebene zurück. Der Standardwert ist 0.
Siehe auch „ setResolveLayer()“.
int QRhiColorAttachment::resolveLevel() const
Gibt die aktuell eingestellte Mip-Stufe der Resolve-Textur zurück. Der Standardwert ist 0.
Siehe auch „ setResolveLevel()“.
QRhiTexture *QRhiColorAttachment::resolveTexture() const
Gibt die „resolve“-Textur zurück, auf die diese Anhangsbeschreibung verweist, oder „ nullptr “, falls keine vorhanden ist.
Das Festlegen einer von „null“ verschiedenen Resolve-Textur ist dann sinnvoll, wenn der Anhang auf eine Multisample-Textur oder einen Renderbuffer verweist. Die „ QRhiTexture “ in der Funktion „resolveTexture()“ ist dann eine nicht-Multisample-2D-Textur (oder ein Textur-Array) mit derselben Größe (jedoch einer Sample-Anzahl von 1). Der Multisample-Inhalt wird am Ende jedes Render-Durchlaufs automatisch in diese Textur aufgelöst.
Siehe auch ` setResolveTexture()`.
void QRhiColorAttachment::setLayer(int layer)
Legt den Index „ layer “ fest.
Siehe auch layer().
void QRhiColorAttachment::setLevel(int level)
Legt den Mip- level fest.
Siehe auch level().
[since 6.7] void QRhiColorAttachment::setMultiViewCount(int count)
Legt die Ansicht „ count “ fest. Ein Wert größer als 1 bedeutet, dass das Renderziel mit diesem Farb-Attachment für das Multiview-Rendering verwendet wird. Der Standardwert ist 0. Werte kleiner als 2 bedeuten, dass kein Multiview-Rendering erfolgt.
Wenn „ count “ auf „ 2 “ oder höher gesetzt ist, muss der Farb-Anhang mit einem 2D-Textur-Array verknüpft sein. „ layer()“ und „ multiViewCount()“ definieren gemeinsam den Bereich der Textur-Array-Elemente, die beim Multiview-Rendering als Ziel dienen.
Wenn beispielsweise ` layer ` auf ` 0 ` und ` multiViewCount ` auf ` 2` gesetzt ist, muss das Textur-Array 2 (oder mehr) Elemente enthalten, und das Multiview-Rendering zielt auf die Elemente 0 und 1 ab. Die Variable ` gl_ViewIndex ` in den Shadern hat dann den Wert ` 0 ` oder ` 1 `, wobei die Ansicht ` 0 ` dem Textur-Array-Element ` 0` entspricht und die Ansicht ` 1 ` dem Array-Element ` 1`.
Hinweis: Wenn „ count “auf einen Wert größer als 1gesetzt wird , ein Textur-Array als „ texture()“ verwendet wird und „ beginPass()“ auf ein „ QRhiTextureRenderTarget “ mit dieser Farbzuordnung aufgerufen wird, bedeutet dies Multiview-Rendering für den gesamten Render-Durchlauf. „ multiViewCount()“ sollte nur gesetzt werden, wenn Multiview-Rendering gewünscht ist. Multiview kann nicht mit anderen Texturtypen als 2D-Textur-Arrays verwendet werden. (Obwohl 3D-Texturen je nach Grafik-API und Backend möglicherweise funktionieren, wird Anwendungen dennoch empfohlen, sich nicht darauf zu verlassen und ausschließlich 2D-Textur-Arrays als Renderziele für das Multiview-Rendering zu verwenden.)
Weitere Details zum Multiview-Rendering finden Sie unter GL_OVR_multiview. Beachten Sie, dass Qt bei der Ausführung unter OpenGL (ES) zusätzlich GL_OVR_multiview2 erfordert.
Multiview-Rendering ist nur verfügbar, wenn die Funktion „ MultiView “ laut isFeatureSupported() als unterstützt gemeldet wird.
Hinweis: Beachten Sieaus Gründen der Portabilität die Einschränkungen, die beim Multiview-Rendering mit einigen Grafik-APIs bestehen. Es wird empfohlen, dass Multiview-Render-Durchläufe nicht auf Funktionen zurückgreifen, die GL_OVR_multiview als nicht unterstützt deklariert. Die einzige Ausnahme bilden Shader-Stage-Ausgänge außer „ gl_Position “, die von gl_ViewIndex abhängen: Auf diese kann man sich (selbst bei OpenGL) verlassen, da QRhi „Multiview“ niemals als unterstützt meldet, ohne dass auch „ GL_OVR_multiview2 “ vorhanden ist.
Hinweis: Multiview-Rendering wird in Kombination mit Tessellation oder Geometrie-Shadern nicht unterstützt, auch wenn einige Implementierungen bestimmter Grafik-APIs dies möglicherweise zulassen.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch ` multiViewCount()`.
void QRhiColorAttachment::setRenderBuffer(QRhiRenderBuffer *rb)
Legt den Renderbuffer „ rb “ fest.
Hinweis: „ texture()“ und „ renderBuffer()“ können nicht gleichzeitig gesetzt werden (d. h., sie können nicht gleichzeitig ungleich Null sein).
Siehe auch ` renderBuffer()`.
void QRhiColorAttachment::setResolveLayer(int layer)
Legt die zu verwendende Auflösungstextur „ layer “ fest.
Siehe auch ` resolveLayer()`.
void QRhiColorAttachment::setResolveLevel(int level)
Legt den zu verwendenden Mip- level für die Resolve-Textur fest.
Siehe auch „ resolveLevel()“.
void QRhiColorAttachment::setResolveTexture(QRhiTexture *tex)
Legt die Auflösung der Textur tex fest.
tex Es wird erwartet, dass es sich um eine 2D-Textur oder ein 2D-Textur-Array handelt. In beiden Fällen zielt die Auflösung auf eine einzelne Mip-Stufe einer einzelnen Ebene (Array-Element) von ` tex` ab. Die Mip-Stufe und die Array-Ebene werden durch ` resolveLevel()` und ` resolveLayer()` festgelegt.
Eine Ausnahme bildet ` multiview`: Wenn der Farb-Attachment einem Textur-Array zugeordnet ist und „Multiview“ aktiviert ist, muss die aufgelöste Textur ebenfalls ein Textur-Array mit ausreichend Elementen für alle Ansichten sein. In diesem Fall werden alle Elemente, die den Ansichten entsprechen, automatisch aufgelöst; das Verhalten ähnelt dem folgenden Pseudocode:
for (i = 0; i < multiViewCount(); ++i)
resolve texture's layer() + i into resolveTexture's resolveLayer() + iDas Festlegen einer Nicht-Multisample-Textur, um eine Multisample-Textur oder einen Renderbuffer am Ende des Render-Durchgangs automatisch aufzulösen, ist oft der Arbeit mit Multisample-Texturen (und dem Verzicht auf eine „resolve“-Textur) vorzuziehen, da dadurch das Schreiben spezieller Fragment-Shader vermieden wird, die ausschließlich mit Multisample-Texturen arbeiten (sampler2DMS, texelFetch, usw.) und ermöglicht stattdessen die Verwendung desselben Shaders, wie man ihn verwenden würde, wenn die Textur des Attachments von vornherein kein Multisample wäre. Dies geht zu Lasten einer zusätzlichen Ressource (der Nicht-Multisample- tex).
Siehe auch resolveTexture().
void QRhiColorAttachment::setTexture(QRhiTexture *tex)
Legt die Textur „ tex “ fest.
Hinweis: „ texture()“ und „ renderBuffer()“ können nicht gleichzeitig gesetzt werden (d. h., sie dürfen nicht gleichzeitig den Wert „null“ haben).
Siehe auch ` texture()`.
QRhiTexture *QRhiColorAttachment::texture() const
Gibt die Textur zurück, auf die sich diese Anhangsbeschreibung bezieht, oder „ nullptr “, falls keine vorhanden ist.
Siehe auch setTexture().
© 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.