QOpenGLFramebufferObject Class

Die Klasse QOpenGLFramebufferObject kapselt ein OpenGL-Framebuffer-Objekt. Mehr...

Kopfzeile: #include <QOpenGLFramebufferObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl

Öffentliche Typen

enum Attachment { NoAttachment, CombinedDepthStencil, Depth }
enum FramebufferRestorePolicy { DontRestoreFramebufferBinding, RestoreFramebufferBindingToDefault, RestoreFrameBufferBinding }

Öffentliche Funktionen

QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)
QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)
QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
virtual ~QOpenGLFramebufferObject()
void addColorAttachment(const QSize &size, GLenum internalFormat = 0)
void addColorAttachment(int width, int height, GLenum internalFormat = 0)
QOpenGLFramebufferObject::Attachment attachment() const
bool bind()
QOpenGLFramebufferObjectFormat format() const
GLuint handle() const
int height() const
bool isBound() const
bool isValid() const
bool release()
void setAttachment(QOpenGLFramebufferObject::Attachment attachment)
QSize size() const
QList<QSize> sizes() const
GLuint takeTexture()
GLuint takeTexture(int colorAttachmentIndex)
GLuint texture() const
QList<GLuint> textures() const
QImage toImage(bool flipped = true) const
QImage toImage(bool flipped, int colorAttachmentIndex) const
int width() const

Statische öffentliche Mitglieder

bool bindDefault()
void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy)
void blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)
bool hasOpenGLFramebufferBlit()
bool hasOpenGLFramebufferObjects()

Detaillierte Beschreibung

Die Klasse QOpenGLFramebufferObject kapselt ein OpenGL-Framebuffer-Objekt, definiert durch die GL_EXT_framebuffer_object -Erweiterung. Sie stellt eine Rendering-Oberfläche zur Verfügung, die mit Hilfe von QOpenGLPaintDevice mit einer QPainter gezeichnet oder mit nativen OpenGL-Aufrufen gerendert werden kann. Diese Oberfläche kann gebunden und als reguläre Textur in Ihrem eigenen OpenGL-Zeichencode verwendet werden. Standardmäßig erzeugt die Klasse QOpenGLFramebufferObject eine 2D-OpenGL-Textur (unter Verwendung des GL_TEXTURE_2D -Targets), die als internes Rendering-Target verwendet wird.

Es ist wichtig, einen aktuellen OpenGL-Kontext zu haben, wenn man ein QOpenGLFramebufferObject erstellt, andernfalls wird die Initialisierung fehlschlagen.

Erstellen Sie die QOpenGLFrameBufferObject Instanz mit dem CombinedDepthStencil Anhang, wenn Sie möchten, dass QPainter korrekt gerendert wird. Beachten Sie, dass Sie ein QOpenGLFramebufferObject mit mehr als einem Sample pro Pixel erstellen müssen, damit Primitive beim Zeichnen mit einem QPainter antialiased werden. Um ein Multisample-Framebuffer-Objekt zu erstellen, sollten Sie einen der Konstruktoren verwenden, die einen QOpenGLFramebufferObjectFormat -Parameter annehmen, und die QOpenGLFramebufferObjectFormat::samples()-Eigenschaft auf einen Wert ungleich Null setzen.

Für Multisample-Framebuffer-Objekte wird ein Farb-Renderbuffer erstellt, andernfalls wird eine Textur mit dem angegebenen Texturziel erstellt. Der Farbwiedergabepuffer oder die Textur hat das angegebene interne Format und wird an das GL_COLOR_ATTACHMENT0 Attachment im Framebuffer-Objekt gebunden.

Es werden auch mehrere Renderziele unterstützt, falls die OpenGL-Implementierung dies unterstützt. Hier werden mehrere Texturen (oder, im Falle von Multisampling, Renderbuffer) vorhanden sein und jede von ihnen wird an GL_COLOR_ATTACHMENT0, 1, 2, ... gebunden.

Wenn Sie ein Framebuffer-Objekt mit aktiviertem Multisampling als Textur verwenden wollen, müssen Sie es zunächst mit QOpenGLContext::blitFramebuffer() in ein normales Framebuffer-Objekt kopieren.

Es ist möglich, in ein QOpenGLFramebufferObject mit QPainter und QOpenGLPaintDevice in einem separaten Thread zu zeichnen.

Dokumentation der Mitgliedstypen

enum QOpenGLFramebufferObject::Attachment

Dieser Enum-Typ wird verwendet, um die Tiefen- und Schablonenpuffer zu konfigurieren, die dem Framebuffer-Objekt bei seiner Erstellung hinzugefügt werden.

KonstanteWertBeschreibung
QOpenGLFramebufferObject::NoAttachment0Dem Framebuffer-Objekt wird kein Anhang hinzugefügt. Beachten Sie, dass die OpenGL-Tiefen- und Stencil-Tests nicht funktionieren, wenn auf ein Framebuffer-Objekt ohne Tiefen- oder Stencil-Puffer gerendert wird. Dies ist der Standardwert.
QOpenGLFramebufferObject::CombinedDepthStencil1Wenn die Erweiterung GL_EXT_packed_depth_stencil vorhanden ist, wird ein kombinierter Tiefen- und Schablonenpuffer angehängt. Wenn die Erweiterung nicht vorhanden ist, wird nur ein Tiefenpuffer angehängt.
QOpenGLFramebufferObject::Depth2Ein Tiefenpuffer wird an das Framebuffer-Objekt angehängt.

Siehe auch attachment().

enum QOpenGLFramebufferObject::FramebufferRestorePolicy

Dieser Enum-Typ wird verwendet, um das Verhalten in Bezug auf die Wiederherstellung von Framebuffer-Bindungen beim Aufruf von blitFramebuffer() zu konfigurieren.

KonstanteWertBeschreibung
QOpenGLFramebufferObject::DontRestoreFramebufferBinding0Die vorherige Framebuffer-Bindung wird nicht wiederhergestellt. Der Aufrufer ist für die Verfolgung und Einstellung der Framebuffer-Bindung nach Bedarf verantwortlich.
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault1Nach dem Blit-Vorgang den Standard-Framebuffer binden.
QOpenGLFramebufferObject::RestoreFrameBufferBinding2Stellen Sie den zuvor gebundenen Framebuffer wieder her. Dies ist potenziell teuer, da der aktuell gebundene Framebuffer abgefragt werden muss.

Siehe auch blitFramebuffer().

Dokumentation der Mitgliedsfunktionen

[explicit] QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)

Konstruiert ein OpenGL-Framebuffer-Objekt und bindet eine 2D-OpenGL-Textur an den Puffer mit der Größe size. Die Textur wird an das Ziel GL_COLOR_ATTACHMENT0 im Framebuffer-Objekt gebunden.

Der Parameter target wird verwendet, um das Ziel der OpenGL-Textur anzugeben. Das Standardziel ist GL_TEXTURE_2D. Beachten Sie, dass GL_TEXTURE_2D Texturen eine Potenz von 2 in Breite und Höhe haben müssen (z.B. 256x512), es sei denn, Sie verwenden OpenGL 2.0 oder höher.

Standardmäßig sind keine Tiefen- und Schablonenpuffer angehängt. Dieses Verhalten kann mit einem der überladenen Konstruktoren umgeschaltet werden.

Das standardmäßige interne Texturformat ist GL_RGBA8 für Desktop OpenGL und GL_RGBA für OpenGL/ES.

Es ist wichtig, dass Sie einen aktuellen OpenGL-Kontext gesetzt haben, wenn Sie das QOpenGLFramebufferObject erstellen, andernfalls wird die Initialisierung fehlschlagen.

Siehe auch size(), texture(), und attachment().

QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)

Konstruiert ein OpenGL-Framebuffer-Objekt der angegebenen size auf der Grundlage der angegebenen format.

QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)

Konstruiert ein OpenGL-Framebuffer-Objekt und bindet eine 2D-OpenGL-Textur an den Puffer der angegebenen width und height.

Siehe auch size() und texture().

QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)

Konstruiert ein OpenGL-Framebuffer-Objekt mit dem angegebenen width und height basierend auf dem angegebenen format.

QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)

Konstruiert ein OpenGL-Framebuffer-Objekt und bindet eine Textur an den Puffer des angegebenen size.

Der attachment Parameter beschreibt die Tiefen-/Schablonenpufferkonfiguration, target das Texturziel und internalFormat das interne Texturformat. Das Standardtexturziel ist GL_TEXTURE_2D, während das interne Standardformat GL_RGBA8 für Desktop OpenGL und GL_RGBA für OpenGL/ES ist.

Siehe auch size(), texture(), und attachment().

QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)

Konstruiert ein OpenGL-Framebuffer-Objekt und bindet eine Textur an den Puffer der angegebenen width und height.

Der Parameter attachment beschreibt die Tiefen-/Schablonenpufferkonfiguration, target das Texturziel und internalFormat das interne Texturformat. Das Standardtexturziel ist GL_TEXTURE_2D, während das interne Standardformat GL_RGBA8 für Desktop OpenGL und GL_RGBA für OpenGL/ES ist.

Siehe auch size(), texture(), und attachment().

[virtual noexcept] QOpenGLFramebufferObject::~QOpenGLFramebufferObject()

Zerstört das Framebuffer-Objekt und gibt alle zugewiesenen Ressourcen frei.

void QOpenGLFramebufferObject::addColorAttachment(const QSize &size, GLenum internalFormat = 0)

Erzeugt und fügt eine zusätzliche Textur oder einen Renderbuffer mit der Breite und Höhe size hinzu.

Es gibt immer einen Anhang an GL_COLOR_ATTACHMENT0. Rufen Sie diese Funktion auf, um zusätzliche Anhänge an GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, ... einzurichten.

Wenn internalFormat nicht 0 ist, gibt sie das interne Format der Textur oder des Renderbuffers an. Andernfalls wird ein Standardwert von GL_RGBA oder GL_RGBA8 verwendet.

Hinweis: Dies funktioniert nur, wenn mehrere Renderziele von der OpenGL-Implementierung unterstützt werden. Wenn dies nicht der Fall ist, fügt die Funktion keine zusätzlichen Farbanhänge hinzu. Rufen Sie QOpenGLFunctions::hasOpenGLFeature() mit QOpenGLFunctions::MultipleRenderTargets zur Laufzeit auf, um zu prüfen, ob MRT unterstützt wird.

Hinweis: Das interne Format der Farbanhänge kann unterschiedlich sein, aber je nach Treiber kann es Einschränkungen bei den unterstützten Kombinationen geben.

Hinweis: Die Größe der Farbanhänge kann unterschiedlich sein, aber das Rendern ist gemäß der OpenGL-Spezifikation auf den Bereich beschränkt, in den alle Anhänge passen. Einige Treiber sind in dieser Hinsicht jedoch möglicherweise nicht vollständig konform.

void QOpenGLFramebufferObject::addColorAttachment(int width, int height, GLenum internalFormat = 0)

Dies ist eine überladene Funktion.

Erzeugt und fügt eine zusätzliche Textur oder einen Renderbuffer der Größe width und height hinzu.

Wenn internalFormat nicht 0 ist, gibt sie das interne Format der Textur oder des Renderbuffers an. Andernfalls wird eine Vorgabe von GL_RGBA oder GL_RGBA8 verwendet.

QOpenGLFramebufferObject::Attachment QOpenGLFramebufferObject::attachment() const

Gibt den Status der Tiefen- und Schablonenpuffer zurück, die mit diesem Framebuffer-Objekt verbunden sind.

Siehe auch setAttachment().

bool QOpenGLFramebufferObject::bind()

Schaltet das Rendering vom standardmäßigen, vom Windowing-System bereitgestellten Framebuffer auf dieses Framebuffer-Objekt um. Gibt bei Erfolg true zurück, andernfalls false.

Hinweis: Wenn takeTexture() aufgerufen wurde, wird eine neue Textur erstellt und mit dem Framebuffer-Objekt verbunden. Dies ist potenziell teuer und ändert den Kontextstatus (die aktuell gebundene Textur).

Siehe auch release().

[static] bool QOpenGLFramebufferObject::bindDefault()

Schaltet das Rendering auf den standardmäßigen, vom Fenstersystem bereitgestellten Framebuffer zurück. Gibt bei Erfolg true zurück, andernfalls false.

Siehe auch bind() und release().

[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy)

Blendet von dem Rechteck sourceRect im Framebuffer-Objekt source auf das Rechteck targetRect im Framebuffer-Objekt target.

Wenn source oder target gleich 0 ist, wird der Standard-Framebuffer anstelle eines Framebuffer-Objekts als Quelle bzw. Ziel verwendet.

Diese Funktion hat keine Auswirkungen, es sei denn, hasOpenGLFramebufferBlit() gibt true zurück.

Der Parameter buffers sollte eine Maske sein, die aus einer beliebigen Kombination von GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, und GL_STENCIL_BUFFER_BIT besteht. Jeder Puffertyp, der nicht sowohl in den Quell- als auch in den Zielpuffern vorhanden ist, wird ignoriert.

Die Rechtecke sourceRect und targetRect können unterschiedliche Größen haben; in diesem Fall sollte buffers nicht GL_DEPTH_BUFFER_BIT oder GL_STENCIL_BUFFER_BIT enthalten. Der Parameter filter sollte auf GL_LINEAR oder GL_NEAREST gesetzt werden und gibt an, ob bei der Skalierung eine lineare oder nächstliegende Interpolation verwendet werden soll.

Wenn source gleich target ist, wird eine Kopie innerhalb desselben Puffers durchgeführt. Die Ergebnisse sind undefiniert, wenn sich die Quell- und Zielrechtecke überschneiden und unterschiedliche Größen haben. Die Größen müssen auch gleich sein, wenn es sich bei einem der Framebuffer-Objekte um Multisample-Framebuffer handelt.

Hinweis: Der Scherentest schränkt den Überblendungsbereich ein, wenn er aktiviert ist.

Wenn mehrere Renderziele verwendet werden, geben readColorAttachmentIndex und drawColorAttachmentIndex den Index der Farbanhänge in den Quell- und Ziel-Framebuffern an.

restorePolicy bestimmt, ob der Framebuffer, der vor dem Aufruf dieser Funktion gebunden war, wiederhergestellt werden soll, oder ob der Standard-Framebuffer vor der Rückkehr gebunden werden soll, oder ob der Aufrufer für die Verfolgung und Einstellung des gebundenen Framebuffers verantwortlich ist. Die Wiederherstellung des vorherigen Framebuffers kann aufgrund des Aufrufs von glGetIntegerv relativ teuer sein, was bei einigen OpenGL-Treibern zu einem Pipeline-Stillstand führen kann.

Siehe auch hasOpenGLFramebufferBlit().

[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)

Dies ist eine überladene Funktion.

Komfortable Überladung zum Überblenden zwischen zwei Framebuffer-Objekten.

[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)

Dies ist eine überladene Funktion.

* Bequemlichkeitsüberladung zum Überblenden zwischen zwei Framebuffer-Objekten.

[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)

Dies ist eine überladene Funktion.

Bequeme Überladung, um zwischen zwei Framebuffer-Objekten zu blitten und die vorherige Framebuffer-Bindung wiederherzustellen. Entspricht dem Aufruf von blitFramebuffer(target, targetRect, source, sourceRect, buffers, filter, readColorAttachmentIndex, drawColorAttachmentIndex, RestoreFrameBufferBinding).

QOpenGLFramebufferObjectFormat QOpenGLFramebufferObject::format() const

Gibt das Format dieses Framebuffer-Objekts zurück.

GLuint QOpenGLFramebufferObject::handle() const

Gibt das OpenGL-Framebuffer-Objekt-Handle für dieses Framebuffer-Objekt zurück (zurückgegeben von der Funktion glGenFrameBuffersEXT() ). Dieses Handle kann verwendet werden, um neue Bilder oder Puffer an den Framebuffer anzuhängen. Der Benutzer ist für das Aufräumen und Zerstören dieser Objekte verantwortlich.

[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferBlit()

Gibt true zurück, wenn die OpenGL-Erweiterung GL_EXT_framebuffer_blit auf diesem System vorhanden ist; andernfalls wird false zurückgegeben.

Siehe auch blitFramebuffer().

[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()

Gibt true zurück, wenn die OpenGL-Erweiterung GL_EXT_framebuffer_object auf diesem System vorhanden ist; andernfalls wird false zurückgegeben.

int QOpenGLFramebufferObject::height() const

Gibt die Höhe der Anhänge des Framebuffer-Objekts zurück.

bool QOpenGLFramebufferObject::isBound() const

Gibt true zurück, wenn das Framebuffer-Objekt derzeit an den aktuellen Kontext gebunden ist, andernfalls wird false zurückgegeben.

bool QOpenGLFramebufferObject::isValid() const

Gibt true zurück, wenn das Framebuffer-Objekt gültig ist.

Der Framebuffer kann ungültig werden, wenn der Initialisierungsprozess fehlschlägt, der Benutzer einen ungültigen Buffer an das Framebuffer-Objekt anhängt oder eine Breite/Höhe, die nicht eine Zweierpotenz ist, als Texturgröße angegeben wird, wenn das Texturziel GL_TEXTURE_2D ist. Die Begrenzung auf eine Zweierpotenz gilt nicht, wenn die OpenGL-Version 2.0 oder höher ist oder wenn die Erweiterung GL_ARB_texture_non_power_of_two vorhanden ist.

Der Framebuffer kann auch ungültig werden, wenn der QOpenGLContext, in dem der Framebuffer erstellt wurde, zerstört wird und es keine anderen gemeinsamen Kontexte gibt, die den Besitz des Framebuffers übernehmen können.

bool QOpenGLFramebufferObject::release()

Schaltet das Rendering auf den standardmäßigen, vom Fenstersystem bereitgestellten Framebuffer zurück. Gibt bei Erfolg true zurück, andernfalls false.

Siehe auch bind().

void QOpenGLFramebufferObject::setAttachment(QOpenGLFramebufferObject::Attachment attachment)

Setzt die Anhänge des Framebuffer-Objekts auf attachment.

Dies kann verwendet werden, um die Tiefen- und Schablonenpuffer-Anhänge je nach Bedarf freizugeben oder neu anzuhängen.

Hinweis: Diese Funktion ändert die aktuelle Framebuffer-Bindung.

Siehe auch attachment().

QSize QOpenGLFramebufferObject::size() const

Gibt die Größe der an dieses Framebuffer-Objekt angehängten Farb- und Tiefen-/Schablonenanhänge zurück.

QList<QSize> QOpenGLFramebufferObject::sizes() const

Gibt die Größen aller Farbanhänge zurück, die an dieses Framebuffer-Objekt angehängt sind.

GLuint QOpenGLFramebufferObject::takeTexture()

Gibt die Textur-ID für die Textur zurück, die an dieses Framebuffer-Objekt angehängt ist. Das Eigentum an der Textur wird auf den Aufrufer übertragen.

Wenn das Framebuffer-Objekt derzeit gebunden ist, wird eine implizite release() durchgeführt. Beim nächsten Aufruf von bind() wird eine neue Textur erstellt.

Wenn ein Multisample-Framebuffer-Objekt verwendet wird, dann gibt es keine Textur und der Rückgabewert dieser Funktion ist ungültig. In ähnlicher Weise geben unvollständige Framebuffer-Objekte ebenfalls 0 zurück.

Siehe auch texture(), bind(), und release().

GLuint QOpenGLFramebufferObject::takeTexture(int colorAttachmentIndex)

Dies ist eine überladene Funktion.

Gibt die Textur-ID für die Textur zurück, die an das Farbattachment mit dem Index colorAttachmentIndex dieses Framebuffer-Objekts angehängt ist. Das Eigentum an der Textur wird auf den Aufrufer übertragen.

Wenn colorAttachmentIndex gleich 0 ist, ist das Verhalten identisch mit dem der parameterlosen Variante dieser Funktion.

Wenn das Framebuffer-Objekt gerade gebunden ist, wird ein impliziter release() ausgeführt. Beim nächsten Aufruf von bind() wird eine neue Textur erzeugt.

Wenn ein Multisample-Framebuffer-Objekt verwendet wird, dann gibt es keine Textur und der Rückgabewert dieser Funktion ist ungültig. In ähnlicher Weise geben unvollständige Framebuffer-Objekte ebenfalls 0 zurück.

GLuint QOpenGLFramebufferObject::texture() const

Gibt die Textur-ID für die Textur zurück, die als Standard-Rendering-Ziel in diesem Framebuffer-Objekt angebracht ist. Diese Textur-ID kann als normale Textur in Ihrem eigenen OpenGL-Code gebunden werden.

Wenn ein Multisample-Framebuffer-Objekt verwendet wird, ist der von dieser Funktion zurückgegebene Wert ungültig.

Wenn mehrere Texturen angehängt sind, ist der Rückgabewert die ID der ersten Textur.

Siehe auch takeTexture() und textures().

QList<GLuint> QOpenGLFramebufferObject::textures() const

Gibt die Textur-ID für alle angehängten Texturen zurück.

Wenn ein Multisample-Framebuffer-Objekt verwendet wird, wird ein leerer Vektor zurückgegeben.

Siehe auch takeTexture() und texture().

QImage QOpenGLFramebufferObject::toImage(bool flipped = true) const

Gibt den Inhalt dieses Framebuffer-Objekts als QImage zurück.

Wenn flipped wahr ist, wird das Bild von OpenGL-Koordinaten in Rasterkoordinaten gespiegelt. Wenn es zusammen mit QOpenGLPaintDevice verwendet wird, sollte flipped das Gegenteil des Wertes von QOpenGLPaintDevice::paintFlipped() sein.

Das zurückgegebene Bild hat ein Format von vormultipliziertem ARGB32 oder RGB32. Letzteres wird nur verwendet, wenn internalTextureFormat() auf GL_RGB gesetzt ist. Seit Qt 5.2 fällt die Funktion auf vormultipliziertes RGBA8888 oder RGBx8888 zurück, wenn das Lesen in (A)RGB32 nicht unterstützt wird, und das schließt OpenGL ES ein. Seit Qt 5.4 wird ein A2BGR30-Bild zurückgegeben, wenn das interne Format RGB10_A2 ist, und seit Qt 5.12 wird ein RGBA64-Bild zurückgegeben, wenn das interne Format RGBA16 ist.

Wenn das Rendering im Framebuffer nicht mit vormultipliziertem Alpha im Hinterkopf durchgeführt wurde, erstellen Sie einen Wrapper QImage mit einem nicht vormultiplizierten Format. Dies ist notwendig, bevor Operationen wie QImage::save() durchgeführt werden, da sonst die Bilddaten unvormultipliziert werden, obwohl sie von vornherein nicht vormultipliziert wurden. Um einen solchen Wrapper zu erstellen, ohne eine Kopie der Pixeldaten durchzuführen, gehen Sie wie folgt vor:

QImage fboImage(fbo.toImage());
QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);

Bei mehrfach abgetasteten Framebuffer-Objekten werden die Samples mit der Erweiterung GL_EXT_framebuffer_blit aufgelöst. Wenn die Erweiterung nicht verfügbar ist, ist der Inhalt des zurückgegebenen Bildes undefiniert.

Bei einfach abgetasteten Framebuffern wird der Inhalt über glReadPixels abgerufen. Dies ist ein potenziell teurer und ineffizienter Vorgang. Es wird daher empfohlen, diese Funktion so selten wie möglich zu verwenden.

Siehe auch QOpenGLPaintDevice::paintFlipped().

QImage QOpenGLFramebufferObject::toImage(bool flipped, int colorAttachmentIndex) const

Dies ist eine überladene Funktion.

Gibt den Inhalt des Farbanhangs von Index colorAttachmentIndex dieses Framebuffer-Objekts als QImage zurück. Diese Methode spiegelt das Bild von OpenGL-Koordinaten in Rasterkoordinaten, wenn flipped auf true gesetzt ist.

Hinweis: Diese Überladung ist nur voll funktionsfähig, wenn mehrere Renderziele von der OpenGL-Implementierung unterstützt werden. Wenn dies nicht der Fall ist, wird nur ein Farbanhang eingerichtet.

int QOpenGLFramebufferObject::width() const

Gibt die Breite der Anhänge des Framebuffer-Objekts zurück.

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