Auf dieser Seite

QRhiTextureRenderTargetDescription Class

Beschreibt die Farbe und die Tiefe bzw. die Tiefen-/Schablonenaufsätze eines Renderziels. Mehr...

Kopfzeile: #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

QRhiTextureRenderTargetDescription()
QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment)
QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiRenderBuffer *depthStencilBuffer)
QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiTexture *depthTexture)
const QRhiColorAttachment *cbeginColorAttachments() const
const QRhiColorAttachment *cendColorAttachments() const
const QRhiColorAttachment *colorAttachmentAt(qsizetype index) const
qsizetype colorAttachmentCount() const
(since 6.12) int depthLayer() const
(since 6.8) QRhiTexture *depthResolveTexture() const
QRhiRenderBuffer *depthStencilBuffer() const
QRhiTexture *depthTexture() const
void setColorAttachments(std::initializer_list<QRhiColorAttachment> list)
void setColorAttachments(InputIterator first, InputIterator last)
(since 6.12) void setDepthLayer(int depthLayer)
(since 6.8) void setDepthResolveTexture(QRhiTexture *tex)
void setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)
void setDepthTexture(QRhiTexture *texture)
(since 6.9) void setShadingRateMap(QRhiShadingRateMap *map)
(since 6.9) QRhiShadingRateMap *shadingRateMap() const

Ausführliche Beschreibung

Ein Textur-Renderziel verfügt über null oder mehr Texturen als Farb-Attachments, null oder einen Renderbuffer als kombinierten Tiefen-/Stencil-Buffer oder null oder eine Textur als Tiefen-Buffer.

Hinweis: „ depthStencilBuffer()“ und „ depthTexture()“ können nicht gleichzeitig gesetzt werden (sie dürfen nicht gleichzeitig null sein).

Sehen wir uns einige Anwendungsbeispiele in Kombination mit ` QRhiTextureRenderTarget` an.

Dank der Konstruktoren ist die Zuordnung zu einer Textur (und keinem Tiefen-/Stencil-Puffer) einfach:

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(256, 256), 1, QRhiTexture::RenderTarget);
texture->create();
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ texture }));

Der folgende Code erstellt ein Textur-Render-Target, das so eingerichtet ist, dass es auf Mip-Ebene Nr. 2 einer Textur abzielt:

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget | QRhiTexture::MipMapped);
texture->create();
QRhiColorAttachment colorAtt(texture);
colorAtt.setLevel(2);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ colorAtt });

Ein weiteres Beispiel, diesmal zum Rendern in eine Tiefentextur:

QRhiTexture *shadowMap = rhi->newTexture(QRhiTexture::D32F, QSize(1024, 1024), 1, QRhiTexture::RenderTarget);
shadowMap->create();
QRhiTextureRenderTargetDescription rtDesc;
rtDesc.setDepthTexture(shadowMap);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget(rtDesc);

Ein sehr häufiger Fall: eine Textur als Farb-Attachment und einen Renderbuffer als Tiefen-/Stencil-Buffer, um Tiefenprüfungen zu ermöglichen:

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget);
texture->create();
QRhiRenderBuffer *depthStencil = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, QSize(512, 512));
depthStencil->create();
QRhiTextureRenderTargetDescription rtDesc({ texture }, depthStencil);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget(rtDesc);

Schließlich zur portablen Aktivierung des Multisample-Renderings (also auch mit Unterstützung für OpenGL ES 3.0): Dabei wird ein „ QRhiRenderBuffer “ als (Multisample-)Farbpuffer verwendet und anschließend in eine reguläre (nicht-Multisample-)2D-Textur aufgelöst. Um die Tiefenprüfung zu ermöglichen, wird zusätzlich ein Tiefen-Stencil-Puffer verwendet, der ebenfalls die gleiche Anzahl an Samples verwenden muss:

QRhiRenderBuffer *colorBuffer = rhi->newRenderBuffer(QRhiRenderBuffer::Color, QSize(512, 512), 4); // 4x MSAA
colorBuffer->create();
QRhiRenderBuffer *depthStencil = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, QSize(512, 512), 4);
depthStencil->create();
QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget);
texture->create();
QRhiColorAttachment colorAtt(colorBuffer);
colorAtt.setResolveTexture(texture);
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ colorAtt, depthStencil });

Hinweis: Wenn die Multisample-Auflösung aktiviert ist, werden die Multisample-Daten möglicherweise gar nicht ausgegeben. Das bedeutet, dass die Multisample-Textur in einem Farb-Attachment anschließend nicht mit Shadern zum Abtasten (oder für andere Zwecke) verwendet werden darf, wenn eine „resolve“-Textur festgelegt ist, da der Multisample-Farbpuffer in diesem Fall lediglich ein Zwischenspeicher ist, in den bei einigen GPU-Architekturen überhaupt keine Daten zurückgeschrieben werden. Weitere Details finden Sie unter PreserveColorContents.

Hinweis: Wenn Sie „ setDepthTexture()“ anstelle von „ setDepthStencilBuffer()“ verwenden und die Tiefen- (Stencil-)Daten anschließend nicht benötigt werden, setzen Sie das Flag „DoNotStoreDepthStencilContents“ für „ QRhiTextureRenderTarget “. Dadurch wird der zugrunde liegenden 3D-API mitgeteilt, dass die Tiefen-/Stencil-Daten verworfen werden können, was bei gekachelten GPU-Architekturen möglicherweise zu einer besseren Leistung führt. Wenn es sich bei dem Tiefen-Stencil-Puffer um eine „ QRhiRenderBuffer “ handelt (und auch bei der Multisample-Farbtextur, siehe vorherigen Hinweis), ist dies implizit der Fall; bei einem Tiefen- (Stencil-) QRhiTexture muss diese Absicht jedoch explizit deklariert werden. Standardmäßig geht „ QRhi “ davon aus, dass die Daten von Interesse sind (z. B. wird die Tiefentextur anschließend in einem Shader abgetastet).

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

Siehe auch QRhiColorAttachment und QRhiTextureRenderTarget.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept default] QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription()

Erstellt eine leere Beschreibung für ein Textur-Renderziel.

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment)

Erstellt eine Beschreibung für ein Textur-Render-Target mit einem Anhang, der durch ` colorAttachment` definiert ist.

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiRenderBuffer *depthStencilBuffer)

Erstellt eine Beschreibung für ein Textur-Renderziel mit zwei Anhängen: einem Farb-Anhang, der durch colorAttachment beschrieben wird, und einem Tiefen-/Stencil-Anhang mit depthStencilBuffer.

QRhiTextureRenderTargetDescription::QRhiTextureRenderTargetDescription(const QRhiColorAttachment &colorAttachment, QRhiTexture *depthTexture)

Erstellt eine Beschreibung für ein Textur-Renderziel mit zwei Anhängen: einem Farb-Anhang, der durch colorAttachment beschrieben wird, und einem Tiefen-Anhang mit depthTexture.

Hinweis: depthTexture muss ein geeignetes Format haben, beispielsweise QRhiTexture::D16 oder QRhiTexture::D32F.

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::cbeginColorAttachments() const

Gibt einen konstanten Iterator zurück, der auf das erste Element der Anhangsliste verweist.

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::cendColorAttachments() const

Gibt einen const-Iterator zurück, der direkt auf das Element nach dem letzten Element in der Anhangsliste zeigt.

const QRhiColorAttachment *QRhiTextureRenderTargetDescription::colorAttachmentAt(qsizetype index) const

Gibt die Farbzuordnung an der angegebenen Adresse „ index “ zurück.

qsizetype QRhiTextureRenderTargetDescription::colorAttachmentCount() const

Gibt die Anzahl der derzeit festgelegten Farbbezeichnungen zurück.

[since 6.12] int QRhiTextureRenderTargetDescription::depthLayer() const

Gibt den Index des Array-Ausschnitts zurück, der für die Depth/Stencil-Zuordnung verwendet werden soll, oder standardmäßig -1.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch „ setDepthLayer()“ und „ setDepthTexture()“.

[since 6.8] QRhiTexture *QRhiTextureRenderTargetDescription::depthResolveTexture() const

Gibt die Textur zurück, in die eine Multisample-Tiefen- (oder Tiefen-Stencil-)Textur (bzw. ein Textur-Array) aufgelöst wird. „ nullptr “, falls keine vorhanden ist, was der häufigste Fall ist.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch setDepthResolveTexture(), QRhiColorAttachment::resolveTexture() und depthTexture().

QRhiRenderBuffer *QRhiTextureRenderTargetDescription::depthStencilBuffer() const

Gibt den als Depth-Stencil-Buffer verwendeten Renderbuffer zurück oder „ nullptr “, falls keiner festgelegt wurde.

Siehe auch setDepthStencilBuffer().

QRhiTexture *QRhiTextureRenderTargetDescription::depthTexture() const

Gibt die aktuell referenzierte Tiefentextur zurück oder „ nullptr “, falls keine festgelegt wurde.

Siehe auch „ setDepthTexture()“.

void QRhiTextureRenderTargetDescription::setColorAttachments(std::initializer_list<QRhiColorAttachment> list)

Legt die „ list “ der Farbanhänge fest.

template <typename InputIterator> void QRhiTextureRenderTargetDescription::setColorAttachments(InputIterator first, InputIterator last)

Legt die Liste der Farbanhänge über die Iteratoren first und last fest.

[since 6.12] void QRhiTextureRenderTargetDescription::setDepthLayer(int depthLayer)

Legt den Index des Array-Slices fest, der für die Zuordnung von Tiefe und Schablone verwendet werden soll.

Übergeben Sie -1 (Standardwert), um keine bestimmte Ebene anzusteuern. Bei Angabe eines nicht-negativen Werts fügt das Renderziel eine Ansicht hinzu, die genau diese Ebene (diesen Ausschnitt) der Tiefentextur ansteuert. Dies wirkt sich nur aus, wenn eine 2D-Array-Tiefentextur über ` setDepthTexture()` bereitgestellt wird; andernfalls wird der Wert ignoriert.

Der Wert muss innerhalb der Array-Größe der Tiefentextur liegen; die Übergabe eines Index außerhalb dieses Bereichs führt zu undefiniertem Verhalten. Der Index ist absolut in Bezug auf die zugrunde liegende Textur, unabhängig von einem möglicherweise bei der Erstellung der Textur festgelegten Array-Bereich.

Die Angabe von ` depthLayer ` deaktiviert das Layered-/Multiview-Rendering für den Tiefen-Anhang.

Diese Funktion wurde in Qt 6.12 eingeführt.

Siehe auch ` depthLayer()` und ` setDepthTexture()`.

[since 6.8] void QRhiTextureRenderTargetDescription::setDepthResolveTexture(QRhiTexture *tex)

Legt die Textur für die Tiefen- (oder Tiefen-Stencil-)Auflösung fest: tex.

tex Es wird erwartet, dass es sich um eine 2D-Textur oder ein 2D-Textur-Array handelt, dessen Format mit der über ` setDepthTexture()` festgelegten Textur übereinstimmt.

Hinweis: Das Auflösen von Tiefen- (oder Tiefen-Stencil-)Daten funktioniert nur, wenn die Funktion „ QRhi::ResolveDepthStencil “ zur Laufzeit als unterstützt gemeldet wird. Die Unterstützung für das Auflösen von Tiefen-Stencil-Daten ist nicht bei allen Grafik-APIs verfügbar. Entwürfe, die von einer bedingungslosen Verfügbarkeit des Auflösens von Tiefen-Stencil-Daten ausgehen, sind daher nicht portierbar und sollten vermieden werden.

Hinweis: Als zusätzliche Einschränkung insbesondere für OpenGL ES gilt, dass das Festlegen einer Tiefenauflösungstextur möglicherweise nur in Kombination mit ` setDepthTexture()` funktioniert, nicht jedoch mit ` setDepthStencilBuffer()`.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch „ depthResolveTexture()“, „ QRhiColorAttachment::setResolveTexture()“ und „ setDepthTexture()“.

void QRhiTextureRenderTargetDescription::setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)

Legt den Wert „ renderBuffer “ für Depth-Stencil fest. Dies ist nicht zwingend erforderlich; wenn beispielsweise in keiner Grafikpipeline in einem der Render-Durchläufe für dieses Renderziel Depth-Tests/-Schreibvorgänge oder stencilbezogene Funktionen verwendet werden, kann der Wert auf „ nullptr “ belassen werden.

Hinweis: „ depthStencilBuffer()“ und „ depthTexture()“ können nicht gleichzeitig gesetzt werden (dürfen nicht gleichzeitig ungleich Null sein).

Die Verwendung eines „ QRhiRenderBuffer “ anstelle eines 2D-„ QRhiTexture “ als Tiefen- oder Tiefen-/Stencil-Puffer ist sehr verbreitet und wird für Anwendungen empfohlen. Die Verwendung eines „ QRhiTexture “ und damit von „ setDepthTexture()“ wird relevant, wenn später auf die Tiefendaten zugegriffen werden soll (z. B. Abtastung in einem Shader) oder wenn „ multiview rendering “ zum Einsatz kommt (da die Tiefentextur dann ein Textur-Array sein muss).

Siehe auch depthStencilBuffer() und setDepthTexture().

void QRhiTextureRenderTargetDescription::setDepthTexture(QRhiTexture *texture)

Legt die „ texture “ für Depth-Stencil fest. Dies ist eine Alternative zu „ setDepthStencilBuffer()“, bei der anstelle eines „ QRhiRenderBuffer “ ein „ QRhiTexture “ mit einem geeigneten Typ (z. B. „ QRhiTexture::D32F “) bereitgestellt wird.

Hinweis: depthStencilBuffer() und depthTexture() können nicht beide gesetzt werden (dürfen nicht gleichzeitig null sein).

texture kann entweder eine 2D-Textur oder ein 2D-Textur-Array sein (sofern Textur-Arrays unterstützt werden). Die Angabe eines Textur-Arrays ist insbesondere bei multiview rendering relevant.

Hinweis: Wenn „ texture “ ein Format mit einer Stencil-Komponente ist, wie z. B. „ QRhiTexture::D24S8 “, dient es gleichzeitig auch als Stencil-Puffer.

Siehe auch „ depthTexture()“ und „ setDepthStencilBuffer()“.

[since 6.9] void QRhiTextureRenderTargetDescription::setShadingRateMap(QRhiShadingRateMap *map)

Wird mit dem angegebenen „ QRhiShadingRateMap “ verknüpft: map. Diese Funktion ist nur verfügbar, wenn die Funktion „ QRhi::VariableRateShadingMap “ als unterstützt gemeldet wird.

Wird zusätzlich „ QRhiCommandBuffer::setShadingRate()“ aufgerufen, wird für jede Kachel die höhere der beiden Shading-Raten verwendet. Derzeit gibt es keine Möglichkeit, das Verhalten des Kombinators zu steuern.

Hinweis: Wenn das Renderziel bereits erstellt wurde (create() wurde erfolgreich aufgerufen), bedeutet das Festlegen einer Shading-Rate-Map, dass ein anderes, neues QRhiRenderPassDescriptor erforderlich ist und somit ein Neuaufbau notwendig ist. Rufen Sie setRenderPassDescriptor() erneut auf (außerhalb eines Render-Passes) und führen Sie anschließend durch Aufruf von create() einen Neuaufbau durch. Dies hat auch weitere Folgewirkungen, beispielsweise für Grafik-Pipelines: Diese müssen ebenfalls mit dem neuen „ QRhiRenderPassDescriptor “ verknüpft und anschließend neu aufgebaut werden. Unter QRhiRenderPassDescriptor::serializedFormat() finden Sie einige Vorschläge, wie Sie damit umgehen können. Denken Sie daran, auch das Flag „ QRhiGraphicsPipeline::UsesShadingRate “ zu setzen.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch shadingRateMap().

[since 6.9] QRhiShadingRateMap *QRhiTextureRenderTargetDescription::shadingRateMap() const

Gibt den aktuell eingestellten Wert für „ QRhiShadingRateMap “ zurück. Standardmäßig ist dies „ nullptr “.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch ` setShadingRateMap()`.

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