QOpenGLTextureBlitter Class
Die Klasse „QOpenGLTextureBlitter“ bietet eine bequeme Möglichkeit, texturierte Vierecke über OpenGL zu zeichnen. Mehr...
| Header: | #include <QOpenGLTextureBlitter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QOpenGLTextureBlitter ist Teil von „3D-Rendering“.
Öffentliche Typen
| enum | Origin { OriginBottomLeft, OriginTopLeft } |
Öffentliche Funktionen
| QOpenGLTextureBlitter() | |
| ~QOpenGLTextureBlitter() | |
| void | bind(GLenum target = GL_TEXTURE_2D) |
| void | blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin) |
| void | blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform) |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| void | release() |
| void | setOpacity(float opacity) |
| void | setRedBlueSwizzle(bool swizzle) |
| bool | supportsExternalOESTarget() const |
| bool | supportsRectangleTarget() const |
Statische öffentliche Mitglieder
| QMatrix3x3 | sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin) |
| QMatrix4x4 | targetTransform(const QRectF &target, const QRect &viewport) |
Ausführliche Beschreibung
Das Zeichnen von texturierten Vierecken, um den Inhalt einer Textur auf den Bildschirm zu bringen, ist ein gängiger Vorgang bei der Entwicklung von 2D-Benutzeroberflächen. QOpenGLTextureBlitter bietet eine Komfortklasse, um die Wiederholung von Vertexdaten, Shader-Quellen, die Verwaltung von Puffern und Programmen sowie Matrixberechnungen zu vermeiden.
Beispielsweise kann eine Unterklasse von ` QOpenGLWidget ` wie folgt vorgehen, um den in einen Framebuffer gerenderten Inhalt an der Pixelposition ` (x, y)` zu zeichnen:
void OpenGLWidget::initializeGL()
{
m_blitter.create();
m_fbo = new QOpenGLFramebufferObject(size);
}
void OpenGLWidget::paintGL()
{
m_fbo->bind();
// update offscreen content
m_fbo->release();
m_blitter.bind();
const QRect targetRect(QPoint(x, y), m_fbo->size());
const QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(0, 0), m_fbo->size()));
m_blitter.blit(m_fbo->texture(), target, QOpenGLTextureBlitter::OriginBottomLeft);
m_blitter.release();
}Der Blitter implementiert GLSL-Shader sowohl für GLSL 1.00 (geeignet für OpenGL (ES) 2.x und Kompatibilitätsprofile neuerer OpenGL-Versionen) als auch für Version 150 (geeignet für Core-Profile-Kontexte mit OpenGL 3.2 und neuer).
Dokumentation zu den Mitgliedstypen
enum QOpenGLTextureBlitter::Origin
| Konstante | Wert | Beschreibung |
|---|---|---|
QOpenGLTextureBlitter::OriginBottomLeft | 0 | Gibt an, dass die Daten in der Textur der OpenGL-Konvention für Koordinatensysteme folgen, d. h., Y verläuft von unten nach oben. |
QOpenGLTextureBlitter::OriginTopLeft | 1 | Gibt an, dass die Y-Achse in den Texturdaten von oben nach unten verläuft, was bei normalen, nicht gespiegelten Bilddaten üblich ist. |
Siehe auch ` blit()`.
Dokumentation der Mitgliedsfunktionen
QOpenGLTextureBlitter::QOpenGLTextureBlitter()
Erstellt eine neue Instanz von `QOpenGLTextureBlitter`.
Hinweis: Im Konstruktor werdenkeine Grafikressourcen initialisiert. Dadurch ist es unbedenklich, einfache QOpenGLTextureBlitter-Mitglieder in Klassen einzubinden, da die eigentliche Initialisierung, die vom OpenGL-Kontext abhängt, erst in ` create()` erfolgt.
[noexcept] QOpenGLTextureBlitter::~QOpenGLTextureBlitter()
Löscht die Instanz.
Hinweis: Wenn der OpenGL-Kontext – oder ein Kontext, der Ressourcen mit ihm teilt –, der beim Aufruf von ` create()` aktuell war, nicht mehr aktuell ist, werden die Grafikressourcen nicht freigegeben. Daher wird empfohlen, ` destroy()` manuell aufzurufen, anstatt sich darauf zu verlassen, dass der Destruktor die Bereinigung der OpenGL-Ressourcen übernimmt.
void QOpenGLTextureBlitter::bind(GLenum target = GL_TEXTURE_2D)
Bindet die vom Blitter verwendeten Grafikressourcen. Diese Funktion muss vor dem Aufruf von ` blit()` aufgerufen werden. Code, der den OpenGL-Status verändert, sollte zwischen dem Aufruf von `bind()` und ` blit()` vermieden werden, da es andernfalls zu Konflikten kommen kann.
target ist das Texturziel für die Quelltextur und muss entweder GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE oder GL_OES_EGL_image_external sein.
Siehe auch „ release()“ und „ blit()“.
void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)
Führt den Blit mit der Quelltextur ` texture` durch.
targetTransform Gibt die angewendete Transformation an. Diese wird in der Regel von der Hilfsfunktion ` targetTransform()` generiert.
sourceOrigin Gibt an, ob die Bilddaten gespiegelt werden müssen. Wenn texture einer an einen FBO angehängten Textur entspricht, wird OriginBottomLeft verwendet. Basiert texture hingegen auf nicht gespiegelten Bilddaten, wird OriginTopLeft verwendet. Dies ist effizienter als die Verwendung von QImage::flipped().
Siehe auch targetTransform(), Origin und bind().
void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)
Führt den Blit mit der Quelltextur ` texture` durch.
targetTransform Gibt die angewendete Transformation an. Diese wird in der Regel von der Hilfsfunktion ` targetTransform()` generiert.
sourceTransform Gibt die auf die Quelle angewendete Transformation an. Dadurch kann nur ein Teilbereich der Quelltextur verwendet werden. Diese wird in der Regel von der Hilfsfunktion ` sourceTransform()` generiert.
Siehe auch „ sourceTransform()“, „ targetTransform()“, „ Origin “ und „ bind()“.
bool QOpenGLTextureBlitter::create()
Initialisiert die vom Blitter verwendeten Grafikressourcen.
Gibt bei Erfolg „ true “ zurück, bei einem Fehler „ false “. Fehler können auftreten, wenn im aktuellen Thread kein OpenGL-Kontext vorhanden ist oder wenn die Shader-Kompilierung aus irgendeinem Grund fehlschlägt.
Siehe auch isCreated() und destroy().
void QOpenGLTextureBlitter::destroy()
Gibt alle vom Blitter belegten Grafikressourcen frei. Es wird davon ausgegangen, dass der OpenGL-Kontext – oder ein anderer Kontext, der Ressourcen mit diesem teilt –, der beim Aufruf von ` create()` im Thread aktiv war, weiterhin aktiv ist.
Die Funktion hat keine Wirkung, wenn sich der Blitter nicht im Status „created“ befindet.
Siehe auch ` create()`.
bool QOpenGLTextureBlitter::isCreated() const
Gibt „ true “ zurück, wenn „ create()“ aufgerufen wurde und erfolgreich war. Andernfalls „ false “.
Siehe auch create() und destroy().
void QOpenGLTextureBlitter::release()
Hebt die Bindung der vom Blitter verwendeten Grafikressourcen auf.
Siehe auch „ bind()“.
void QOpenGLTextureBlitter::setOpacity(float opacity)
Ändert die Deckkraft auf „ opacity “. Die Standarddeckkraft beträgt 1,0.
Hinweis: Der Blitter verändert den Überblendungsstatus nicht. Es obliegt dem Aufrufer von ` blit()` sicherzustellen, dass die richtigen Überblendungseinstellungen aktiv sind.
void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)
Legt fest, ob Swizzling für die roten und blauen Farbkanäle auf „ swizzle “ aktiviert ist. Eine Konvertierung von BGRA nach RGBA (die im Shader auf der GPU statt einer langsamen Transformation auf der CPU-Seite erfolgt) kann nützlich sein, wenn die Quelltextur Daten aus einem „ QImage “ mit einem Format wie „ QImage::Format_ARGB32 “ enthält, das auf Little-Endian-Systemen auf BGRA abgebildet wird.
Standardmäßig ist der Rot-Blau-Swizzle deaktiviert, da dies für eine an ein Framebuffer-Objekt angehängte Textur oder eine Textur erforderlich ist, die auf einem Byte-Ordered- QImage -Format (wie QImage::Format_RGBA8888) basiert.
[static] QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)
Berechnet eine 3x3-Matrix, die als Eingabe für ` blit()` geeignet ist. Dies wird verwendet, wenn nur ein Teil der Textur beim Blit verwendet werden soll.
subTexture ist das gewünschte Quellrechteck in Pixeln, textureSize gibt die volle Breite und Höhe der Texturdaten an. origin legt die Ausrichtung der Bilddaten in Bezug auf die Y-Achse fest.
bool QOpenGLTextureBlitter::supportsExternalOESTarget() const
Gibt „ true “ zurück, wenn „ bind()“ „ GL_TEXTURE_EXTERNAL_OES “ als Zielargument akzeptiert.
bool QOpenGLTextureBlitter::supportsRectangleTarget() const
Gibt „ true “ zurück, wenn „ bind()“ „ GL_TEXTURE_RECTANGLE “ als Zielargument akzeptiert.
[static] QMatrix4x4 QOpenGLTextureBlitter::targetTransform(const QRectF &target, const QRect &viewport)
Berechnet eine für blit() geeignete Zieltransformation.
target ist das Zielrechteck in Pixeln. ` viewport ` beschreibt die Quellabmessungen und wird in den meisten Fällen auf `(0, 0, Bildbreite, Bildhöhe)` gesetzt.
Für eine nicht skalierte Ausgabe sollten die Größen von ` target ` und ` viewport ` übereinstimmen.
Siehe auch blit().
© 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.