Auf dieser Seite

QRhiRenderBuffer Class

Renderbuffer-Ressource. 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
Erbt von: QRhiResource

Öffentliche Typen

struct NativeRenderBuffer
enum Flag { UsedWithSwapChainOnly }
flags Flags
enum Type { DepthStencil, Color }

Öffentliche Funktionen

virtual bool create() = 0
virtual bool createFrom(QRhiRenderBuffer::NativeRenderBuffer src)
QRhiRenderBuffer::Flags flags() const
QSize pixelSize() const
int sampleCount() const
void setFlags(QRhiRenderBuffer::Flags f)
void setPixelSize(const QSize &sz)
void setSampleCount(int s)
void setType(QRhiRenderBuffer::Type t)
QRhiRenderBuffer::Type type() const

Neu implementierte öffentliche Funktionen

virtual QRhiResource::Type resourceType() const override

Detaillierte Beschreibung

Renderbuffer können nicht abgetastet oder gelesen werden, bieten jedoch in manchen Fällen einige Vorteile gegenüber Texturen:

Ein „ DepthStencil “-Renderbuffer kann bei einigen APIs verzögert zugewiesen werden und auf temporärem Speicher basieren. Auf manchen Plattformen kann dies bedeuten, dass der Depth-/Stencil-Buffer überhaupt keinen physischen Speicherplatz belegt.

Diese vorübergehende Natur hat eine Konsequenz: Es ist nicht garantiert, dass der Inhalt eines „ DepthStencil “-Renderbuffers erhalten bleibt, wenn ein Backend einen Renderdurchlauf intern unterbrechen und neu starten muss. Bei Metal geschieht dies, wenn ein Draw-Call über indirekte Befehlspuffer implementiert wird – was bei einem „ drawIndexedIndirect()“ mit hoher Draw-Anzahl der Fall ist – sowie bei Verwendung von Tessellation. Nach einem solchen Aufruf aufgezeichnete Zeichnungsvorgänge führen dann einen Tiefentest anhand eines Tiefenpuffers durch, der seinen Inhalt verloren hat. Wenn dies von Bedeutung ist, fügen Sie mit ` setDepthTexture()` anstelle eines Renderbuffers einen Tiefen- oder Tiefen-Stencil- QRhiTexture ein: Dieser bleibt über eine Unterbrechung hinweg erhalten, sofern nicht ` QRhiTextureRenderTarget::DoNotStoreDepthStencilContents ` gesetzt ist.

Color Renderbuffer sind nützlich, da „ QRhi::MultisampleRenderBuffer “ möglicherweise auch dann unterstützt wird, wenn „ QRhi::MultisampleTexture “ nicht unterstützt wird.

Wie der Renderbuffer von einem Backend implementiert wird, ist für die Anwendungen nicht sichtbar. In einigen Fällen kann er auf gewöhnlichen Texturen basieren, während in anderen Fällen möglicherweise eine andere Art von nativer Ressource verwendet wird.

Renderbuffer, die als (und ausschließlich als) Tiefen- und Stencil-Puffer in Kombination mit den Farbpuffern eines „ QRhiSwapChain “ verwendet werden, sollten das Flag „ UsedWithSwapChainOnly “ gesetzt haben. Dies dient einem doppelten Zweck: Solche Puffer sind – abhängig vom Backend und den zugrunde liegenden APIs – effizienter, und „ QRhi “ sorgt für eine automatische Größenanpassung an die Farbpuffer, was bedeutet, dass die Aufrufe von „ setPixelSize()“ und „ create()“ für solche Renderbuffer nicht erforderlich sind.

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

Dokumentation zu Mitgliedstypen

enum QRhiRenderBuffer::Flag
flags QRhiRenderBuffer::Flags

Flag-Werte für „ flags “ () und „ setFlags “ ()

KonstanteWertBeschreibung
QRhiRenderBuffer::UsedWithSwapChainOnly1 << 0Bei Renderbuffern vom Typ „ DepthStencil “ gibt dies an, dass der Renderbuffer ausschließlich in Kombination mit einem „ QRhiSwapChain “ verwendet wird und niemals auf andere Weise. Dies ermöglicht eine automatische Größenanpassung und den automatischen Neuaufbau der Ressourcen, sodass der Aufruf von „ setPixelSize()“ oder „ create()“ nicht erforderlich ist, solange dieses Flag gesetzt ist. Dieser Flag-Wert kann auch backend-spezifisches Verhalten auslösen. Beispielsweise ist bei OpenGL, wo eine separate API für die Fensterverwaltungsschnittstelle verwendet wird (EGL, GLX usw.), das Flag besonders wichtig, da es die Erstellung einer tatsächlichen Renderbuffer-Ressource vermeidet, da bereits ein vom Fensterverwaltungssystem bereitgestellter Tiefen-/Stencil-Puffer gemäß der Anforderung von ` QSurfaceFormat` vorhanden ist.

Der Typ „Flags“ ist ein `typedef` für ` QFlags<Flag>`. Er speichert eine ODER-Kombination von `Flag`-Werten.

enum QRhiRenderBuffer::Type

Legt den Typ des Renderbuffers fest

KonstanteWertBeschreibung
QRhiRenderBuffer::DepthStencil0Kombinierte Tiefe/Stencil
QRhiRenderBuffer::Color1Farbe

Dokumentation der Member-Funktionen

[pure virtual] bool QRhiRenderBuffer::create()

Erstellt die entsprechenden nativen Grafikressourcen. Wenn aufgrund eines früheren Aufrufs von `create()` ohne entsprechenden Aufruf von ` destroy()` bereits Ressourcen vorhanden sind, wird zunächst implizit ` destroy()` aufgerufen.

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

[virtual] bool QRhiRenderBuffer::createFrom(QRhiRenderBuffer::NativeRenderBuffer src)

Ähnlich wie bei create(), mit dem Unterschied, dass keine neuen nativen Renderbuffer-Objekte erstellt werden. Stattdessen wird das durch src angegebene native Renderbuffer-Objekt verwendet.

Dies ermöglicht den Import eines bestehenden Renderbuffer-Objekts (das je nach Grafik-API zum selben Gerät oder Sharing-Kontext gehören muss) aus einer externen Grafik-Engine.

Hinweis: Dies gilt derzeit nur für OpenGL. Diese Funktion dient ausschließlich dazu, den Import eines Renderbuffer-Objekts zu ermöglichen, das an ein spezielles, externes Objekt wie beispielsweise ein `EGLImageKHR` gebunden ist. Sobald die Anwendung den Aufruf `glEGLImageTargetRenderbufferStorageOES` ausgeführt hat, kann das Renderbuffer-Objekt an diese Funktion übergeben werden, um ein umhüllendes ` QRhiRenderBuffer` zu erstellen, das wiederum als Farb-Attachment an ein ` QRhiTextureRenderTarget ` übergeben werden kann, um das Rendern in das `EGLImage` zu ermöglichen.

Hinweis: „ pixelSize()“, „ sampleCount()“ und „ flags()“ müssen weiterhin korrekt festgelegt werden. Die Übergabe falscher Größen und anderer Werte an „ QRhi::newRenderBuffer()“, gefolgt von einem „createFrom()“-Aufruf in der Erwartung, dass das native Renderbuffer-Objekt allein ausreicht, um solche Werte abzuleiten, ist falsch und führt zu Problemen.

Hinweis: „ QRhiRenderBuffer “ übernimmt nicht die Eigentumsrechte am nativen Objekt, und „ destroy()“ gibt dieses Objekt nicht frei.

Hinweis: Diese Funktion ist nur implementiert, wenn die Funktion „ QRhi::RenderBufferImport “ als „ supported “ gemeldet wird. Andernfalls führt die Funktion keine Aktion aus und der Rückgabewert lautet „ false “.

Gibt bei Erfolg „ true “ zurück, andernfalls „ false “, wenn die Funktion nicht unterstützt wird.

QRhiRenderBuffer::Flags QRhiRenderBuffer::flags() const

Gibt die Flags zurück.

Siehe auch setFlags().

QSize QRhiRenderBuffer::pixelSize() const

Gibt die Pixelgröße zurück.

Siehe auch „ setPixelSize()“.

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

Implementiert neu: ` QRhiResource::resourceType()` const.

Gibt den Ressourcentyp zurück.

int QRhiRenderBuffer::sampleCount() const

Gibt die Anzahl der Abtastwerte zurück. Der Wert 1 bedeutet, dass kein Multisample-Antialiasing verwendet wird.

Siehe auch setSampleCount().

void QRhiRenderBuffer::setFlags(QRhiRenderBuffer::Flags f)

Setzt die Flags auf „ f “.

Siehe auch flags().

void QRhiRenderBuffer::setPixelSize(const QSize &sz)

Legt die Größe (in Pixeln) auf „ sz “ fest.

Siehe auch ` pixelSize()`.

void QRhiRenderBuffer::setSampleCount(int s)

Setzt die Anzahl der Samples auf „ s “.

Siehe auch sampleCount().

void QRhiRenderBuffer::setType(QRhiRenderBuffer::Type t)

Setzt den Typ auf „ t “.

Siehe auch ` type()`.

QRhiRenderBuffer::Type QRhiRenderBuffer::type() const

Gibt den Renderbuffer-Typ zurück.

Siehe auch „ setType()“.

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