QRhiRenderBuffer Class

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

Reimplementierte öffentliche Funktionen

virtual QRhiResource::Type resourceType() const override

Detaillierte Beschreibung

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

Ein DepthStencil Renderbuffer kann bei einigen APIs "lazily" zugewiesen und mit transientem Speicher gesichert werden. Auf einigen Plattformen kann dies bedeuten, dass der Tiefen-/Schablonenpuffer überhaupt kein physisches Backing verwendet.

Color Renderbuffer sind nützlich, da QRhi::MultisampleRenderBuffer unterstützt werden kann, auch wenn QRhi::MultisampleTexture nicht unterstützt wird.

Wie der Renderbuffer von einem Backend implementiert wird, ist den Anwendungen nicht bekannt. In einigen Fällen kann er durch gewöhnliche Texturen unterstützt werden, während in anderen Fällen eine andere Art von nativen Ressourcen verwendet werden kann.

Renderbuffer, die als (und nur als) Tiefenschablonenpuffer in Kombination mit den Farbpuffern eines QRhiSwapChain verwendet werden, sollten das UsedWithSwapChainOnly Flag gesetzt haben. Dies dient einem doppelten Zweck: solche Puffer sind, abhängig vom Backend und den zugrundeliegenden APIs, effizienter, und QRhi bietet ein automatisches Größenverhalten, um mit den Farbpuffern übereinzustimmen, was bedeutet, dass der Aufruf von setPixelSize() und create() für solche Renderpuffer nicht notwendig ist.

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

Dokumentation der Mitgliedstypen

enum QRhiRenderBuffer::Flag
flags QRhiRenderBuffer::Flags

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

KonstanteWertBeschreibung
QRhiRenderBuffer::UsedWithSwapChainOnly1 << 0Für DepthStencil Renderbuffer zeigt dies an, dass der Renderbuffer nur in Kombination mit einem QRhiSwapChain verwendet wird und niemals auf andere Weise. Dies ermöglicht eine automatische Größenanpassung und Wiederherstellung der Ressourcen, so dass der Aufruf von setPixelSize() oder create() nicht erforderlich ist, wenn dieses Flag gesetzt ist. Dieser Flag-Wert kann auch Backend-spezifisches Verhalten auslösen, zum Beispiel bei OpenGL, wo eine separate Windowing-System-Schnittstellen-API verwendet wird (EGL, GLX, etc.), ist das Flag besonders wichtig, da es die Erstellung einer tatsächlichen Renderbuffer-Ressource vermeidet, da bereits ein vom Windowing-System bereitgestellter Tiefen-/Schablonenpuffer vorhanden ist, wie von QSurfaceFormat angefordert.

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

enum QRhiRenderBuffer::Type

Gibt den Typ des Renderbuffers an

KonstanteWertBeschreibung
QRhiRenderBuffer::DepthStencil0Kombinierte Tiefe/Schablone
QRhiRenderBuffer::Color1Farbe

Dokumentation der Mitgliedsfunktionen

[pure virtual] bool QRhiRenderBuffer::create()

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

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

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

Ähnlich wie 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) von einer externen Grafik-Engine.

Hinweis: Dies gilt derzeit nur für OpenGL. Diese Funktion existiert nur, um das Importieren eines Renderbuffer-Objekts zu ermöglichen, das an ein spezielles, externes Objekt gebunden ist, wie z.B. ein EGLImageKHR. Nachdem die Anwendung den glEGLImageTargetRenderbufferStorageOES-Aufruf ausgeführt hat, kann das Renderbuffer-Objekt an diese Funktion übergeben werden, um ein Wrapping QRhiRenderBuffer zu erstellen, das wiederum als Farbanhang an ein QRhiTextureRenderTarget übergeben werden kann, um das Rendering auf das EGLImage zu ermöglichen.

Hinweis: pixelSize(), sampleCount() und flags() müssen noch korrekt gesetzt werden. Die Übergabe falscher Größen und anderer Werte an QRhi::newRenderBuffer() und ein anschließendes createFrom() in der Erwartung, dass das native Renderbuffer-Objekt allein ausreicht, um solche Werte abzuleiten, ist falsch und wird zu Problemen führen.

Hinweis: QRhiRenderBuffer übernimmt nicht den Besitz des nativen Objekts, und destroy() wird dieses Objekt nicht freigeben.

Hinweis: Diese Funktion ist nur implementiert, wenn das Merkmal QRhi::RenderBufferImport als supported gemeldet wird. Andernfalls tut die Funktion nichts und der Rückgabewert ist false.

Gibt bei Erfolg true zurück, bei Nichtunterstützung false.

QRhiRenderBuffer::Flags QRhiRenderBuffer::flags() const

Gibt die Flaggen 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

Reimplements: QRhiResource::resourceType() const.

Gibt den Ressourcentyp zurück.

int QRhiRenderBuffer::sampleCount() const

Gibt die Anzahl der Samples zurück. 1 bedeutet kein Multisample-Antialiasing.

Siehe auch setSampleCount().

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

Setzt die Flags auf f.

Siehe auch flags().

void QRhiRenderBuffer::setPixelSize(const QSize &sz)

Setzt die Größe (in Pixel) auf sz.

Siehe auch pixelSize().

void QRhiRenderBuffer::setSampleCount(int s)

Setzt die Anzahl der Proben 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 Typ des Renderbuffers zurück.

Siehe auch setType().

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