QOffscreenSurface Class
Die Klasse QOffscreenSurface repräsentiert eine Offscreen-Oberfläche in der zugrunde liegenden Plattform. Mehr...
Kopfzeile: | #include <QOffscreenSurface> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
Erbt: | QObject und QSurface |
Öffentliche Funktionen
QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr) | |
virtual | ~QOffscreenSurface() |
void | create() |
void | destroy() |
bool | isValid() const |
QNativeInterface * | nativeInterface() const |
QSurfaceFormat | requestedFormat() const |
QScreen * | screen() const |
void | setFormat(const QSurfaceFormat &format) |
void | setScreen(QScreen *newScreen) |
Reimplementierte öffentliche Funktionen
virtual QSurfaceFormat | format() const override |
virtual QSize | size() const override |
virtual QSurface::SurfaceType | surfaceType() const override |
Signale
void | screenChanged(QScreen *screen) |
Detaillierte Beschreibung
QOffscreenSurface ist für die Verwendung mit QOpenGLContext gedacht, um das Rendern mit OpenGL in einem beliebigen Thread zu ermöglichen, ohne eine QWindow erstellen zu müssen.
Obwohl die Oberfläche normalerweise gerendert werden kann, sind die Pixel der Oberfläche nicht zugänglich. QOffscreenSurface sollte nur verwendet werden, um OpenGL-Ressourcen wie Texturen oder Framebuffer-Objekte zu erstellen.
Eine Anwendung wird typischerweise QOffscreenSurface verwenden, um einige zeitaufwendige Aufgaben in einem separaten Thread auszuführen, um den Haupt-Rendering-Thread nicht zu blockieren. Die im QOffscreenSurface-Kontext erstellten Ressourcen können mit dem OpenGL-Hauptkontext geteilt werden. Einige häufige Anwendungsfälle sind asynchrone Textur-Uploads oder Rendering in eine QOpenGLFramebufferObject.
Wie die Offscreen-Oberfläche implementiert wird, hängt von der zugrundeliegenden Plattform ab, aber normalerweise wird ein Pixelpuffer (pbuffer) verwendet. Wenn die Plattform keine Offscreen-Oberflächen implementiert oder unterstützt, wird QOffscreenSurface intern eine unsichtbare QWindow verwenden.
Hinweis: Aufgrund der Tatsache, dass QOffscreenSurface auf einigen Plattformen von QWindow unterstützt wird, müssen plattformübergreifende Anwendungen sicherstellen, dass create() nur im Haupt-(GUI-)Thread aufgerufen wird. Die QOffscreenSurface kann dann sicher mit makeCurrent() auf anderen Threads verwendet werden, aber die Initialisierung und Zerstörung muss immer auf dem Haupt-(GUI)-Thread erfolgen.
Hinweis: Um eine Offscreen-Oberfläche zu erstellen, die garantiert mit einem bestimmten Kontext und Fenster kompatibel ist, muss das Format auf das tatsächliche Format des Kontexts oder des Fensters gesetzt werden, d.h. auf das von QOpenGLContext::format() oder QWindow::format() zurückgegebene QSurfaceFormat , nachdem der Kontext oder das Fenster erstellt wurde. Die Übergabe des von QWindow::requestedFormat() zurückgegebenen Formats an setFormat() kann zu einer inkompatiblen Offscreen-Oberfläche führen, da die zugrundeliegende Windowing-Systemschnittstelle einen unterschiedlichen Satz von Konfigurationen für Fenster- und Pufferoberflächen anbieten kann.
Hinweis: Einige Plattformen können eine oberflächenlose Kontexterweiterung (z.B. EGL_KHR_surfaceless_context) verwenden, wenn diese verfügbar ist. In diesem Fall gibt es keine zugrunde liegende native Oberfläche. Für die Anwendungsfälle von QOffscreenSurface (Rendering zu FBOs, Textur-Upload) ist dies kein Problem.
Dokumentation der Mitgliedsfunktionen
[explicit]
QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr)
Erzeugt eine Offscreen-Oberfläche für die targetScreen mit der angegebenen parent.
Die zugrundeliegende Plattformoberfläche wird erst nach dem Aufruf von create() erstellt.
Siehe auch setScreen() und create().
[virtual noexcept]
QOffscreenSurface::~QOffscreenSurface()
Zerstört die Oberfläche im Offscreen.
void QOffscreenSurface::create()
Weist die mit der Offscreen-Oberfläche verbundenen Plattformressourcen zu.
An diesem Punkt wird das mit setFormat() festgelegte Oberflächenformat in eine tatsächliche native Oberfläche aufgelöst.
Rufen Sie destroy() auf, um die Plattformressourcen freizugeben, falls erforderlich.
Hinweis: Auf einigen Plattformen muss diese Funktion im Haupt-Thread (GUI) aufgerufen werden.
Siehe auch destroy().
void QOffscreenSurface::destroy()
Gibt die mit dieser Offscreen-Oberfläche verbundenen nativen Plattformressourcen frei.
Siehe auch create().
[override virtual]
QSurfaceFormat QOffscreenSurface::format() const
Reimplements: QSurface::format() const.
Gibt das aktuelle Format dieser Offscreen-Oberfläche zurück.
Nachdem die Offscreen-Oberfläche erstellt wurde, gibt diese Funktion das aktuelle Oberflächenformat der Oberfläche zurück. Es kann von dem angeforderten Format abweichen, wenn das angeforderte Format von der Plattform nicht erfüllt werden konnte.
Siehe auch setFormat(), create(), und requestedFormat().
bool QOffscreenSurface::isValid() const
Gibt true
zurück, wenn diese Offscreen-Oberfläche gültig ist; andernfalls wird false
zurückgegeben.
Die Offscreen-Oberfläche ist gültig, wenn die Plattformressourcen erfolgreich zugewiesen wurden.
Siehe auch create().
template <typename QNativeInterface> QNativeInterface *QOffscreenSurface::nativeInterface() const
Gibt eine native Schnittstelle des angegebenen Typs für die Oberfläche zurück.
Diese Funktion bietet Zugriff auf die plattformspezifische Funktionalität von QOffScreenSurface, wie sie im Namespace QNativeInterface definiert ist:
Native Schnittstelle zu einer Offscreen-Oberfläche auf Android |
Wenn die angeforderte Schnittstelle nicht verfügbar ist, wird nullptr
zurückgegeben.
QSurfaceFormat QOffscreenSurface::requestedFormat() const
Gibt das angeforderte Oberflächenformat dieser Offscreen-Oberfläche zurück.
Wenn das angeforderte Format von der Plattformimplementierung nicht unterstützt wird, weicht das angeforderteFormat vom tatsächlichen Offscreen-Oberflächenformat ab.
Dies ist der mit setFormat() gesetzte Wert.
Siehe auch setFormat() und format().
QScreen *QOffscreenSurface::screen() const
Gibt den Bildschirm zurück, mit dem die Offscreen-Oberfläche verbunden ist.
Siehe auch setScreen().
[signal]
void QOffscreenSurface::screenChanged(QScreen *screen)
Dieses Signal wird ausgegeben, wenn sich die screen einer Offscreen-Oberfläche ändert, entweder indem sie explizit mit setScreen() gesetzt wird oder automatisch, wenn der Bildschirm des Fensters entfernt wird.
void QOffscreenSurface::setFormat(const QSurfaceFormat &format)
Legt die Offscreen-Oberfläche format fest.
Das Oberflächenformat wird in der Funktion create() aufgelöst. Wenn Sie diese Funktion nach create() aufrufen, wird das Oberflächenformat der nativen Oberfläche nicht erneut aufgelöst.
Siehe auch format(), create(), und destroy().
void QOffscreenSurface::setScreen(QScreen *newScreen)
Legt den Bildschirm fest, mit dem die Offscreen-Oberfläche verbunden ist.
Wenn die Offscreen-Fläche bereits erstellt wurde, wird sie auf newScreen neu erstellt.
Siehe auch screen().
[override virtual]
QSize QOffscreenSurface::size() const
Reimplements: QSurface::size() const.
Gibt die Größe der Offscreen-Oberfläche zurück.
[override virtual]
QSurface::SurfaceType QOffscreenSurface::surfaceType() const
Reimplements: QSurface::surfaceType() const.
Gibt den Oberflächentyp der Offscreen-Oberfläche zurück.
Der Oberflächentyp einer Offscreen-Oberfläche ist immer QSurface::OpenGLSurface.
© 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.