QOpenGLFramebufferObject Class
Die Klasse `QOpenGLFramebufferObject` kapselt ein OpenGL-Framebuffer-Objekt. Mehr...
| Header: | #include <QOpenGLFramebufferObject> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QOpenGLFramebufferObject ist Teil von „3D-Rendering“.
Ö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() |
Ausführliche Beschreibung
Die Klasse `QOpenGLFramebufferObject` kapseln ein OpenGL-Framebuffer-Objekt, das durch die Erweiterung „ GL_EXT_framebuffer_object “ definiert ist. Sie stellt eine Rendering-Oberfläche bereit, auf die mit Hilfe von ` QOpenGLPaintDevice` mithilfe von ` QPainter ` gezeichnet oder die 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 generiert die Klasse `QOpenGLFramebufferObject` eine 2D-OpenGL-Textur (unter Verwendung des Ziels ` GL_TEXTURE_2D `), die als internes Rendering-Ziel verwendet wird.
Es ist wichtig, beim Erstellen eines `QOpenGLFramebufferObject` über einen aktiven OpenGL-Kontext zu verfügen, da die Initialisierung andernfalls fehlschlägt.
Erstellen Sie die QOpenGLFrameBufferObject-Instanz mit der Anbindung „ CombinedDepthStencil “, 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` anti-aliast werden. Um ein Multisample-Framebuffer-Objekt zu erstellen, sollten Sie einen der Konstruktoren verwenden, die einen ` QOpenGLFramebufferObjectFormat `-Parameter annehmen, und die Eigenschaft ` QOpenGLFramebufferObjectFormat::samples()` auf einen Wert ungleich Null setzen.
Bei Framebuffer-Objekten mit Multisampling wird ein Farb-Render-Buffer erstellt, andernfalls eine Textur mit dem angegebenen Texturziel. Der Farb-Render-Buffer oder die Textur hat das angegebene interne Format und wird an den „ GL_COLOR_ATTACHMENT0 “-Anschluss im Framebuffer-Objekt gebunden.
Es werden auch mehrere Render-Ziele unterstützt, sofern die OpenGL-Implementierung dies zulässt. In diesem Fall sind mehrere Texturen (oder im Falle von Multisampling mehrere Renderpuffer) vorhanden, und jede davon wird an „ GL_COLOR_ATTACHMENT0 “, „ 1 “, „ 2 “ usw. angehängt.
Wenn Sie ein Framebuffer-Objekt mit aktiviertem Multisampling als Textur verwenden möchten, müssen Sie zunächst mit `QOpenGLContext::blitFramebuffer()` einen Kopiervorgang von diesem Objekt in ein reguläres Framebuffer-Objekt durchführen.
Es ist möglich, mithilfe von QPainter und QOpenGLPaintDevice in einem separaten Thread in ein QOpenGLFramebufferObject zu zeichnen.
Dokumentation zu den Mitgliedstypen
enum QOpenGLFramebufferObject::Attachment
Dieser Enum-Typ dient dazu, den Tiefen- und den Stencil-Puffer zu konfigurieren, die beim Erstellen des Framebuffer-Objekts daran angehängt werden.
| Konstante | Wert | Beschreibung |
|---|---|---|
QOpenGLFramebufferObject::NoAttachment | 0 | Dem Framebuffer-Objekt wird kein Puffer zugeordnet. 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::CombinedDepthStencil | 1 | Wenn die Erweiterung „ GL_EXT_packed_depth_stencil “ vorhanden ist, wird ein kombinierter Tiefen- und Stencil-Puffer angehängt. Ist die Erweiterung nicht vorhanden, wird nur ein Tiefenpuffer angehängt. |
QOpenGLFramebufferObject::Depth | 2 | Ein Tiefenpuffer wird an das Framebuffer-Objekt angehängt. |
Siehe auch ` attachment()`.
enum QOpenGLFramebufferObject::FramebufferRestorePolicy
Dieser Enum-Typ dient zur Konfiguration des Verhaltens bei der Wiederherstellung von Framebuffer-Bindungen beim Aufruf von ` blitFramebuffer()`.
| Konstante | Wert | Beschreibung |
|---|---|---|
QOpenGLFramebufferObject::DontRestoreFramebufferBinding | 0 | Die vorherige Framebuffer-Bindung wird nicht wiederhergestellt. Der Aufrufer ist dafür verantwortlich, die Framebuffer-Bindung nach Bedarf zu verfolgen und festzulegen. |
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault | 1 | Nach dem Blit-Vorgang wird der Standard-Framebuffer gebunden. |
QOpenGLFramebufferObject::RestoreFrameBufferBinding | 2 | Stelle den zuvor gebundenen Framebuffer wieder her. Dies kann rechenintensiv sein, 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)
Erstellt 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 ` dient zur Angabe des OpenGL-Textur-Ziels. Das Standardziel ist ` GL_TEXTURE_2D`. Beachten Sie, dass ` GL_TEXTURE_2D `-Texturen eine Breite und Höhe haben müssen, die einer Potenz von 2 entsprechen (z. B. 256x512), es sei denn, Sie verwenden OpenGL 2.0 oder höher.
Standardmäßig sind keine Tiefen- und Stencil-Puffer angehängt. Dieses Verhalten kann mithilfe eines 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 beim Erstellen des QOpenGLFramebufferObject ein aktueller OpenGL-Kontext festgelegt ist, da die Initialisierung andernfalls fehlschlägt.
Siehe auch „ size()“, „ texture()“ und „ attachment()“.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
Erstellt ein OpenGL-Framebuffer-Objekt des angegebenen „ size “ auf der Grundlage des übergebenen „ format “.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)
Erstellt 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)
Erstellt ein OpenGL-Framebuffer-Objekt mit den angegebenen Werten für „ width “ und „ height “ auf der Grundlage des übergebenen „ format “.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
Erstellt ein OpenGL-Framebuffer-Objekt und bindet eine Textur an den Puffer des angegebenen „ size “.
Der Parameter ` attachment ` beschreibt die Konfiguration des Tiefen-/Stencil-Puffers, ` target ` das Texturziel und ` internalFormat ` das interne Texturformat. Das Standard-Texturziel ist ` GL_TEXTURE_2D`, während das Standard-interne Format für Desktop-OpenGL ` GL_RGBA8 ` und für OpenGL/ES ` GL_RGBA ` lautet.
Siehe auch size(), texture() und attachment().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
Erstellt ein OpenGL-Framebuffer-Objekt und bindet eine Textur an den Puffer der angegebenen „ width “ und „ height “.
Der Parameter „ attachment “ beschreibt die Konfiguration des Tiefen-/Stencil-Puffers, „ target “ das Texturziel und „ internalFormat “ das interne Texturformat. Das Standard-Texturziel ist „ GL_TEXTURE_2D “, während das Standard-interne Format für Desktop-OpenGL „ GL_RGBA8 “ und für OpenGL/ES „ GL_RGBA “ lautet.
Siehe auch size(), texture() und attachment().
[virtual noexcept] QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
Löscht das Framebuffer-Objekt und gibt alle zugewiesenen Ressourcen frei.
void QOpenGLFramebufferObject::addColorAttachment(const QSize &size, GLenum internalFormat = 0)
Erstellt und fügt eine zusätzliche Textur oder einen zusätzlichen Renderbuffer mit den Breiten und Höhen „ size “ hinzu.
Es gibt immer eine Anbindung unter GL_COLOR_ATTACHMENT0. Rufen Sie diese Funktion auf, um zusätzliche Anbindungen unter GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, ... einzurichten.
Wenn „ internalFormat “ nicht „ 0 “ ist, gibt es das interne Format der Textur oder des Renderbuffers an. Andernfalls wird standardmäßig „GL_RGBA“ oder „GL_RGBA8“ verwendet.
Hinweis: Dies funktioniert nur, wenn die OpenGL-Implementierung mehrere Renderziele (MRT) unterstützt. Ist dies nicht der Fall, fügt die Funktion keine zusätzlichen Farb-Attachments hinzu. Rufen Sie „ QOpenGLFunctions::hasOpenGLFeature()“ zur Laufzeit mit dem Wert „ QOpenGLFunctions::MultipleRenderTargets “ auf, um zu prüfen, ob MRT unterstützt wird.
Hinweis: Das interne Format der Farb-Attachments kann variieren, und je nach Treiber können Einschränkungen hinsichtlich der unterstützten Kombinationen bestehen.
Hinweis: Die Größe der Farb-Attachments kann variieren, doch gemäß der OpenGL-Spezifikation ist das Rendern auf den Bereich beschränkt, in den alle Attachments passen. Einige Treiber sind in dieser Hinsicht jedoch möglicherweise nicht vollständig konform.
void QOpenGLFramebufferObject::addColorAttachment(int width, int height, GLenum internalFormat = 0)
Erstellt und fügt eine zusätzliche Textur oder einen zusätzlichen Renderbuffer mit den Abmessungen width und height hinzu.
Wenn internalFormat nicht 0 ist, gibt es das interne Format der Textur oder des Renderbuffers an. Andernfalls wird der Standardwert GL_RGBA oder GL_RGBA8 verwendet.
Dies ist eine überladene Funktion.
QOpenGLFramebufferObject::Attachment QOpenGLFramebufferObject::attachment() const
Gibt den Status der an dieses Framebuffer-Objekt angehängten Tiefen- und Stencil-Puffer zurück.
Siehe auch „ setAttachment()“.
bool QOpenGLFramebufferObject::bind()
Wechselt die Darstellung vom standardmäßigen, vom Fenstersystem bereitgestellten Framebuffer zu diesem Framebuffer-Objekt. Gibt bei Erfolg „ true “ zurück, andernfalls „false“.
Hinweis: Wenn „ takeTexture()“ aufgerufen wurde, wird eine neue Textur erstellt und dem Framebuffer-Objekt zugeordnet. Dies ist potenziell rechenintensiv und verändert den Kontextstatus (die aktuell gebundene Textur).
Siehe auch ` release()`.
[static] bool QOpenGLFramebufferObject::bindDefault()
Stellt die Darstellung wieder auf den vom Standard-Fenstersystem bereitgestellten Framebuffer um. 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)
Führt einen Blit vom Rechteck „ sourceRect “ im Framebuffer-Objekt „ source “ zum Rechteck „ targetRect “ im Framebuffer-Objekt „ target “ durch.
Ist source oder target gleich 0, wird anstelle eines Framebuffer-Objekts als Quelle bzw. Ziel der Standard-Framebuffer verwendet.
Diese Funktion hat keine Auswirkung, 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 im Quell- als auch im Zielpuffer vorhanden ist, wird ignoriert.
Die Rechtecke „ sourceRect “ und „ targetRect “ können unterschiedliche Größen haben; in diesem Fall sollte „ buffers “ weder „ GL_DEPTH_BUFFER_BIT “ noch „ GL_STENCIL_BUFFER_BIT “ enthalten. Der Parameter „ filter “ sollte auf „ GL_LINEAR “ oder „ GL_NEAREST “ gesetzt werden und legt fest, ob bei der Skalierung lineare oder nächste-Nachbar-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 überlappen und unterschiedliche Größen haben. Die Größen müssen außerdem identisch sein, wenn eines der Framebuffer-Objekte ein Multisample-Framebuffer ist.
Hinweis: Der Scissor-Test schränkt den Blit-Bereich ein, sofern er aktiviert ist.
Wenn mehrere Renderziele verwendet werden, geben ` readColorAttachmentIndex ` und ` drawColorAttachmentIndex ` den Index der Farb-Attachments in den Quell- und Ziel-Framebuffern an.
restorePolicy bestimmt, ob der vor dem Aufruf dieser Funktion gebundene Framebuffer wiederhergestellt werden soll, ob vor der Rückgabe der Standard-Framebuffer gebunden werden soll oder ob der Aufrufer für die Verfolgung und Festlegung des gebundenen Framebuffers verantwortlich ist. Das Wiederherstellen des vorherigen Framebuffers kann aufgrund des Aufrufs von ` glGetIntegerv ` relativ aufwendig 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)
Überladene Komfortfunktion zum Blitten zwischen zwei Framebuffer-Objekten.
Dies ist eine überladene Funktion.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
* Überladene Komfortfunktion zum Blitten zwischen zwei Framebuffer-Objekten.
Dies ist eine überladene Funktion.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)
Bequeme Überladung zum Blit zwischen zwei Framebuffer-Objekten und zum Wiederherstellen der vorherigen Framebuffer-Bindung. Entspricht dem Aufruf von `blitFramebuffer(target, targetRect, source, sourceRect, buffers, filter, readColorAttachmentIndex, drawColorAttachmentIndex, RestoreFrameBufferBinding)`.
Dies ist eine überladene Funktion.
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 (das von der Funktion ` glGenFrameBuffersEXT() ` zurückgegeben wird). Mit diesem Handle können neue Bilder oder Puffer an den Framebuffer angehängt werden. Der Benutzer ist dafür verantwortlich, diese Objekte zu bereinigen und zu löschen.
[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 an das Framebuffer-Objekt angehängten Objekte 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 Puffer an das Framebuffer-Objekt anhängt oder eine Breite/Höhe angegeben wird, die keine Zweierpotenz ist, sofern das Texturziel GL_TEXTURE_2D ist. Die Einschränkung bezüglich der Nicht-Zweierpotenz-Größe 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 ebenfalls ungültig werden, wenn der „ QOpenGLContext “, in dem der Framebuffer erstellt wurde, zerstört wird und es keine anderen gemeinsam genutzten Kontexte gibt, die die Eigentümerschaft am Framebuffer übernehmen können.
bool QOpenGLFramebufferObject::release()
Stellt die Darstellung wieder auf den vom Standard-Fenstersystem bereitgestellten Framebuffer um. Gibt bei Erfolg „ true “ zurück, andernfalls „false“.
Siehe auch bind().
void QOpenGLFramebufferObject::setAttachment(QOpenGLFramebufferObject::Attachment attachment)
Setzt die Verknüpfungen des Framebuffer-Objekts auf „ attachment “.
Dies kann verwendet werden, um die Anbindungen des Tiefen- und Stencil-Puffers nach Bedarf freizugeben oder erneut anzubringen.
Hinweis: Diese Funktion ändert die aktuelle Framebuffer-Bindung.
Siehe auch ` attachment()`.
QSize QOpenGLFramebufferObject::size() const
Gibt die Größe der Farb- und Tiefen-/Stencil-Anhänge zurück, die diesem Framebuffer-Objekt zugeordnet sind.
QList<QSize> QOpenGLFramebufferObject::sizes() const
Gibt die Größen aller an dieses Framebuffer-Objekt angehängten Farb-Anhänge zurück.
GLuint QOpenGLFramebufferObject::takeTexture()
Gibt die Textur-ID der an dieses Framebuffer-Objekt angehängten Textur zurück. Die Eigentumsrechte an der Textur werden auf den Aufrufer übertragen.
Ist das Framebuffer-Objekt derzeit gebunden, wird implizit „ release()“ aufgerufen. Beim nächsten Aufruf von „ bind()“ wird eine neue Textur erstellt.
Wird ein Multisample-Framebuffer-Objekt verwendet, liegt keine Textur vor, und der Rückgabewert dieser Funktion ist ungültig. Ebenso geben unvollständige Framebuffer-Objekte den Wert 0 zurück.
Siehe auch texture(), bind() und release().
GLuint QOpenGLFramebufferObject::takeTexture(int colorAttachmentIndex)
Gibt die Textur-ID für die Textur zurück, die dem Farb-Attachment mit dem Index colorAttachmentIndex dieses Framebuffer-Objekts zugeordnet ist. Die Eigentumsrechte an der Textur werden auf den Aufrufer übertragen.
Wenn colorAttachmentIndex den Wert „ 0 “ hat, entspricht das Verhalten der Variante dieser Funktion ohne Parameter.
Ist das Framebuffer-Objekt derzeit gebunden, wird implizit release() aufgerufen. Beim nächsten Aufruf von bind() wird eine neue Textur erstellt.
Wird ein Multisample-Framebuffer-Objekt verwendet, liegt keine Textur vor, und der Rückgabewert dieser Funktion ist ungültig. Ebenso geben unvollständige Framebuffer-Objekte ebenfalls 0 zurück.
Dies ist eine überladene Funktion.
GLuint QOpenGLFramebufferObject::texture() const
Gibt die Textur-ID für die Textur zurück, die als Standard-Rendering-Ziel in diesem Framebuffer-Objekt angehängt ist. Diese Textur-ID kann in Ihrem eigenen OpenGL-Code als normale Textur gebunden werden.
Wird ein Multisample-Framebuffer-Objekt verwendet, 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.
Wird ein Multisample-Framebuffer-Objekt verwendet, 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.
Ist „ flipped “ wahr, wird das Bild von OpenGL-Koordinaten in Rasterkoordinaten umgewandelt. Bei Verwendung zusammen mit „ QOpenGLPaintDevice “ sollte „ flipped “ das Gegenteil des Werts von „ QOpenGLPaintDevice::paintFlipped()“ sein.
Das zurückgegebene Bild hat das Format „premultiplied ARGB32“ oder „RGB32“. Letzteres wird nur verwendet, wenn `internalTextureFormat()` auf ` GL_RGB` gesetzt ist. Seit Qt 5.2 greift die Funktion auf „premultiplied RGBA8888“ oder „RGBx8888“ zurück, wenn das Einlesen in (A)RGB32 nicht unterstützt wird; dies gilt auch für OpenGL ES. 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 bei der Darstellung im Framebuffer kein vorvervielfachtes Alpha berücksichtigt wurde, erstellen Sie ein Wrapper- QImage -Objekt mit einem nicht vorvervielfachten Format. Dies ist erforderlich, bevor Operationen wie ` QImage::save()` ausgeführt werden, da die Bilddaten andernfalls entvervielfacht würden, obwohl sie ursprünglich gar nicht vorvervielfacht waren. Um einen solchen Wrapper zu erstellen, ohne die Pixeldaten zu kopieren, gehen Sie wie folgt vor:
QImage fboImage(fbo.toImage());
QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);Bei Framebuffer-Objekten mit Mehrfachabtastung werden die Abtastwerte mithilfe der Erweiterung ` GL_EXT_framebuffer_blit ` aufgelöst. Ist die Erweiterung nicht verfügbar, ist der Inhalt des zurückgegebenen Bildes undefiniert.
Bei Framebuffern mit Einzelabtastung wird der Inhalt über ` glReadPixels` abgerufen. Dies ist ein potenziell rechenintensiver und ineffizienter Vorgang. Daher wird empfohlen, diese Funktion so selten wie möglich zu verwenden.
Siehe auch ` QOpenGLPaintDevice::paintFlipped()`.
QImage QOpenGLFramebufferObject::toImage(bool flipped, int colorAttachmentIndex) const
Gibt den Inhalt des Farb-Attachments mit dem Index „ colorAttachmentIndex “ dieses Framebuffer-Objekts als „ QImage “ zurück. Diese Methode wandelt das Bild von OpenGL-Koordinaten in Rasterkoordinaten um, wenn „ flipped “ auf „ true “ gesetzt ist.
Hinweis: Diese Überladung ist nur dann voll funktionsfähig, wenn die OpenGL-Implementierung mehrere Render-Ziele unterstützt. Ist dies nicht der Fall, wird nur ein Farb-Attachment eingerichtet.
Dies ist eine überladene Funktion.
int QOpenGLFramebufferObject::width() const
Gibt die Breite der an das Framebuffer-Objekt angehängten Objekte zurück.
© 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.