Auf dieser Seite

QQuickFramebufferObject::Renderer Class

class QQuickFramebufferObject::Renderer

Geschützte Funktionen

Renderer()
virtual ~Renderer()
virtual QOpenGLFramebufferObject *createFramebufferObject(const QSize &size)
QOpenGLFramebufferObject *framebufferObject() const
void invalidateFramebufferObject()
virtual void render() = 0
virtual void synchronize(QQuickFramebufferObject *item)
void update()

Ausführliche Beschreibung

Die Klasse „ QQuickFramebufferObject::Renderer “ dient zur Implementierung der Darstellungslogik eines „ QQuickFramebufferObject “.

Dokumentation der Member-Funktionen

[protected] Renderer::Renderer()

Erstellt einen neuen Renderer.

Diese Funktion wird während der Synchronisationsphase des Szenengraphen aufgerufen, wenn der GUI-Thread gesperrt ist.

[virtual noexcept protected] Renderer::~Renderer()

Der Renderer wird automatisch gelöscht, wenn die Szenenbaum-Ressourcen für das Element „ QQuickFramebufferObject “ bereinigt werden.

Diese Funktion wird im Rendering-Thread aufgerufen.

[virtual protected] QOpenGLFramebufferObject *Renderer::createFramebufferObject(const QSize &size)

Diese Funktion wird aufgerufen, wenn ein neues FBO benötigt wird. Dies geschieht im ersten Frame. Wenn „ QQuickFramebufferObject::textureFollowsItemSize “ auf „true“ gesetzt ist, wird sie jedes Mal erneut aufgerufen, wenn sich die Abmessungen des Elements ändern.

Das zurückgegebene FBO kann beliebige Anbindungen haben. Wenn „ QOpenGLFramebufferObjectFormat “ angibt, dass das FBO multisampled sein soll, weist die interne Implementierung des Renderers ein zweites FBO zu und blitzt das multisampled FBO in das FBO, das zur Darstellung der Textur verwendet wird.

Hinweis: Bei manchen Hardwarekomponenten treten Probleme mit kleinen FBO-Größen auf. „ size “ berücksichtigt dies; seien Sie daher vorsichtig, wenn Sie die Größe durch eine feste Größe überschreiben. Eine Mindestgröße von 64x64 sollte immer funktionieren.

Hinweis: „ size “ berücksichtigt das Gerätepixelverhältnis, d. h., der Wert wird bereits mit dem richtigen Skalierungsfaktor multipliziert. Wenn das Fenster, das das Element „ QQuickFramebufferObject “ enthält, auf einen Bildschirm mit anderen Einstellungen verschoben wird, wird das FBO automatisch neu erstellt und diese Funktion mit der korrekten Größe aufgerufen.

[protected] QOpenGLFramebufferObject *Renderer::framebufferObject() const

Gibt das Framebuffer-Objekt zurück, in das derzeit gerendert wird.

[protected] void Renderer::invalidateFramebufferObject()

Rufen Sie diese Funktion innerhalb von ` synchronize()` auf, um das aktuelle FBO zu entwerten. Dadurch wird mit ` createFramebufferObject()` ein neues FBO erstellt.

[pure virtual protected] void Renderer::render()

Diese Funktion wird aufgerufen, wenn das FBO gerendert werden soll. Zu diesem Zeitpunkt ist der Framebuffer gebunden, und die „ glViewport “ wurde entsprechend der FBO-Größe eingerichtet.

Das FBO wird nach der Rückkehr der Funktion automatisch entbunden.

Hinweis: Gehen Sie nicht davon aus, dass der OpenGL-Status beim Aufruf dieser Funktion vollständig auf die Standardwerte zurückgesetzt ist oder dass er zwischen den Aufrufen beibehalten wird. Sowohl der „ Qt Quick “-Renderer als auch der benutzerdefinierte Rendering-Code verwenden denselben OpenGL-Kontext. Das bedeutet, dass der Status möglicherweise bereits vor dem Aufruf dieser Funktion durch Quick geändert wurde.

Hinweis: Es wird empfohlen, vor der Rückgabe „ QQuickOpenGLUtils::resetOpenGLState()“ aufzurufen. Dadurch wird der vom „ Qt Quick “-Renderer verwendete OpenGL-Status zurückgesetzt, wodurch Beeinträchtigungen durch die vom Rendering-Code in dieser Funktion vorgenommenen Statusänderungen vermieden werden.

[virtual protected] void Renderer::synchronize(QQuickFramebufferObject *item)

Diese Funktion wird als Folge von ` QQuickFramebufferObject::update()` aufgerufen.

Verwenden Sie diese Funktion, um den Renderer mit den am Element vorgenommenen Änderungen zu aktualisieren. ` item ` ist das Element, das diesen Renderer instanziiert hat. Die Funktion wird einmal vor der Erstellung des FBO aufgerufen.

Wenn das Element beispielsweise eine Farbeigenschaft besitzt, die von QML gesteuert wird, sollte man ` QQuickFramebufferObject::update()` aufrufen und `synchronize()` verwenden, um die neue Farbe in den Renderer zu kopieren, damit sie zum Rendern des nächsten Frames verwendet werden kann.

Diese Funktion ist der einzige Ort, an dem es für den Renderer und das Element sicher ist, die Mitglieder des jeweils anderen zu lesen und zu schreiben.

[protected] void Renderer::update()

Rufen Sie diese Funktion auf, wenn das FBO erneut gerendert werden soll.

Diese Funktion kann über ` render()` aufgerufen werden, um das erneute Rendern des FBO vor dem nächsten Frame zu erzwingen.

Hinweis: Diese Funktion sollte innerhalb des Renderers verwendet werden. Um das Element im GUI-Thread zu aktualisieren, verwenden Sie ` QQuickFramebufferObject::update()`.

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