QRhiTextureRenderTarget Class

Textur-Rendering-Zielressource. 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
Vererbt: QRhiRenderTarget

Öffentliche Typen

enum Flag { PreserveColorContents, PreserveDepthStencilContents, DoNotStoreDepthStencilContents }
flags Flags

Öffentliche Funktionen

virtual bool create() = 0
QRhiTextureRenderTargetDescription description() const
QRhiTextureRenderTarget::Flags flags() const
virtual QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() = 0
void setDescription(const QRhiTextureRenderTargetDescription &desc)
void setFlags(QRhiTextureRenderTarget::Flags f)

Reimplementierte öffentliche Funktionen

virtual QRhiResource::Type resourceType() const override

Detaillierte Beschreibung

Ein Textur-Rendering-Ziel ermöglicht das Rendering in eine oder mehrere Texturen, optional mit einer Tiefen-Textur oder einem Tiefen-/Schablonen-Renderbuffer.

Für Multisample-Rendering ist es üblich, einen Renderbuffer als Farbattachment zu verwenden und die Nicht-Multisample-Zieltextur als resolve texture festzulegen. Weitere Informationen finden Sie in der detaillierten Beschreibung der Klasse QRhiColorAttachment.

Hinweis: Texturen, die in Kombination mit QRhiTextureRenderTarget verwendet werden, müssen mit dem QRhiTexture::RenderTarget Flag erstellt werden.

Das einfachste Beispiel für die Erstellung eines Rendertargets mit einer Textur als einzelnes Farbattachment:

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, size, 1, QRhiTexture::RenderTarget);
texture->create();
QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ texture });
rp = rt->newCompatibleRenderPassDescriptor();
rt->setRenderPassDescriptor(rp);
rt->create();
// rt can now be used with beginPass()

Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.

Dokumentation der Mitgliedstypen

enum QRhiTextureRenderTarget::Flag
flags QRhiTextureRenderTarget::Flags

Flag-Werte, die das Lade-/Speicherverhalten für das Rendertarget beschreiben. Das Lade-/Speicherverhalten kann je nach Backend in die nativen Ressourcen eingebettet sein und muss daher im Voraus bekannt sein und kann nicht geändert werden, ohne dass ein Neuaufbau (und damit die Freigabe und Erstellung neuer nativer Ressourcen) erfolgt.

KonstanteWertBeschreibung
QRhiTextureRenderTarget::PreserveColorContents1 << 0Gibt an, dass der Inhalt der Farbanhänge beim Starten eines Rendering-Durchgangs geladen werden soll, anstatt ihn zu löschen. Dies ist potenziell teurer, insbesondere auf mobilen (gekachelten) GPUs, ermöglicht aber die Beibehaltung der vorhandenen Inhalte zwischen den Durchgängen. Beim Multisample-Rendering mit einer aufgelösten Textur wird durch das Setzen dieses Flags auch das Speichern (Auslesen) der Multisample-Farbdaten in die Multisample-Textur oder den Renderpuffer angefordert. (für Nicht-Multisample-Rendering werden die Farbdaten immer gespeichert, aber für MSAA verringert das Speichern der Multisample-Daten die Effizienz für bestimmte GPU-Architekturen, daher die Voreinstellung, sie nicht herauszuschreiben) Beachten Sie jedoch, dass dies nicht portabel ist: in einigen Fällen gibt es keine zwischengeschaltete Multisample-Textur auf der Grafik-API-Ebene, z.B. bei Verwendung von OpenGL ES's GL_EXT_multisampled_render_to_texture, da alles implizit ist und von der OpenGL ES-Implementierung behandelt wird. In diesem Fall wird PreserveColorContents wahrscheinlich keine Wirkung haben. Vermeiden Sie daher, sich auf dieses Flag zu verlassen, wenn Sie Multisample-Rendering verwenden und das Farbattachment ein Multisample QRhiTexture (nicht QRhiRenderBuffer) verwendet.
QRhiTextureRenderTarget::PreserveDepthStencilContents1 << 1Gibt an, dass der Inhalt der Tiefentextur beim Start eines Rendering-Durchgangs geladen werden soll, anstatt ihn zu löschen. Nur anwendbar, wenn eine Textur als Tiefenpuffer verwendet wird (QRhiTextureRenderTargetDescription::depthTexture() ist gesetzt), da Tiefen-/Schablonen-Renderpuffer möglicherweise keine physische Unterstützung haben und Daten möglicherweise gar nicht erst herausgeschrieben werden.
QRhiTextureRenderTarget::DoNotStoreDepthStencilContents1 << 2Gibt an, dass der Inhalt der Tiefentextur nicht ausgeschrieben werden muss. Dies ist nur relevant, wenn ein QRhiTexture, nicht QRhiRenderBuffer, als Tiefenschablonenpuffer verwendet wird, da dies für QRhiRenderBuffer implizit ist. Wenn eine depthResolveTexture gesetzt ist, ist das Flag nicht relevant, da das Verhalten dann so ist, als ob das Flag gesetzt wäre. Dieser Enum-Wert wurde in Qt 6.8 eingeführt.

Der Typ Flags ist ein Typedef für QFlags<Flag>. Er speichert eine OR-Kombination von Flag-Werten.

Dokumentation der Mitgliedsfunktionen

[pure virtual] bool QRhiTextureRenderTarget::create()

Erzeugt die entsprechenden nativen Grafikressourcen. Wenn aufgrund eines früheren create() ohne entsprechende destroy() bereits Ressourcen vorhanden sind, wird destroy() implizit zuerst aufgerufen.

Hinweis: renderPassDescriptor() muss vor dem Aufruf von create() gesetzt werden. Um ein QRhiRenderPassDescriptor zu erhalten, das mit dem Rendering-Ziel kompatibel ist, rufen Sie newCompatibleRenderPassDescriptor() vor create(), aber nach dem Setzen aller anderen Parameter, wie description() und flags(), auf. Um Ressourcen zu sparen, sollten Sie, wann immer möglich, dieselbe QRhiRenderPassDescriptor mit mehreren QRhiTextureRenderTarget Instanzen wiederverwenden. Die gemeinsame Nutzung desselben Renderpass-Deskriptors ist nur möglich, wenn die Renderziele dieselbe Anzahl und denselben Typ von Anhängen (die tatsächlichen Texturen können unterschiedlich sein) und dieselben Flags haben.

Hinweis: Ressourcen, wie z. B. QRhiTexture Instanzen, auf die in description() verwiesen wird, müssen bereits mit create() aufgerufen worden sein.

Gibt bei Erfolg true zurück, bei einem fehlgeschlagenen Grafikvorgang false. Unabhängig vom Rückgabewert ist der Aufruf von destroy() immer sicher.

QRhiTextureRenderTargetDescription QRhiTextureRenderTarget::description() const

Gibt die Beschreibung des Rendering-Ziels zurück.

Siehe auch setDescription().

QRhiTextureRenderTarget::Flags QRhiTextureRenderTarget::flags() const

Gibt die aktuell gesetzten Flags zurück.

Siehe auch setFlags().

[pure virtual] QRhiRenderPassDescriptor *QRhiTextureRenderTarget::newCompatibleRenderPassDescriptor()

Gibt eine neue QRhiRenderPassDescriptor zurück, die mit diesem Rendering-Ziel kompatibel ist.

Der zurückgegebene Wert wird auf zwei Arten verwendet: Er kann an setRenderPassDescriptor() und QRhiGraphicsPipeline::setRenderPassDescriptor() übergeben werden. Ein Renderpass-Deskriptor beschreibt die Anhänge (Farbe, Tiefe/Schablone) und das Lade-/Speicherverhalten, die von flags() beeinflusst werden können. Ein QRhiGraphicsPipeline kann nur in Kombination mit einem Rendering-Ziel verwendet werden, für das ein compatible QRhiRenderPassDescriptor festgelegt wurde.

Zwei QRhiTextureRenderTarget Instanzen können sich denselben Renderpass-Deskriptor teilen, solange sie die gleiche Anzahl und Art von Anhängen haben. Die zugehörigen QRhiTexture - oder QRhiRenderBuffer -Instanzen sind nicht Teil des Renderpass-Deskriptors, so dass sie sich in den beiden QRhiTextureRenderTarget -Instanzen unterscheiden können.

Hinweis: Ressourcen, wie z.B. QRhiTexture Instanzen, auf die in description() verwiesen wird, müssen bereits create() für sie aufgerufen haben.

Siehe auch create().

[override virtual] QRhiResource::Type QRhiTextureRenderTarget::resourceType() const

Reimplements: QRhiResource::resourceType() const.

Gibt den Ressourcentyp zurück.

void QRhiTextureRenderTarget::setDescription(const QRhiTextureRenderTargetDescription &desc)

Legt die Rendering-Zielbeschreibung desc fest.

Siehe auch description().

void QRhiTextureRenderTarget::setFlags(QRhiTextureRenderTarget::Flags f)

Setzt die Flags auf f.

Siehe auch flags().

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