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()

Detaillierte Beschreibung

Die Klasse QQuickFramebufferObject::Renderer wird verwendet, um die Rendering-Logik einer QQuickFramebufferObject zu implementieren.

Dokumentation der Mitgliedsfunktionen

[protected] Renderer::Renderer()

Konstruiert einen neuen Renderer.

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

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

Der Renderer wird automatisch gelöscht, wenn die Szenengraphenressourcen 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 neuer FBO benötigt wird. Dies geschieht beim ersten Frame. Wenn QQuickFramebufferObject::textureFollowsItemSize auf true gesetzt ist, wird sie jedes Mal erneut aufgerufen, wenn sich die Abmessungen des Elements ändern.

Der zurückgegebene FBO kann einen beliebigen Anhang haben. Wenn QOpenGLFramebufferObjectFormat angibt, dass der FBO mehrfach abgetastet werden soll, weist die interne Implementierung des Renderers einen zweiten FBO zu und blendet den mehrfach abgetasteten FBO in den FBO ein, der zur Anzeige der Textur verwendet wird.

Hinweis: Manche Hardware hat Probleme mit kleinen FBO-Größen. size berücksichtigt das, also seien Sie vorsichtig, wenn Sie die Größe mit einer festen Größe überschreiben. Eine minimale Größe von 64x64 sollte immer funktionieren.

Hinweis: size berücksichtigt das Pixelverhältnis des Geräts, was bedeutet, dass es bereits mit dem richtigen Skalierungsfaktor multipliziert ist. Wenn Sie das Fenster, das das Element QQuickFramebufferObject enthält, auf einen Bildschirm mit anderen Einstellungen verschieben, wird das FBO automatisch neu erstellt und diese Funktion mit der richtigen Größe aufgerufen.

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

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

[protected] void Renderer::invalidateFramebufferObject()

Rufen Sie diese Funktion während synchronize() auf, um den aktuellen FBO ungültig zu machen. Dies führt dazu, dass mit createFramebufferObject() ein neuer FBO erstellt wird.

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

Diese Funktion wird aufgerufen, wenn das FBO in gerendert werden soll. Der Framebuffer ist zu diesem Zeitpunkt gebunden und die glViewport wurde so eingestellt, dass sie der FBO-Größe entspricht.

Die Bindung des FBO wird automatisch aufgehoben, wenn die Funktion zurückkehrt.

Hinweis: Gehen Sie nicht davon aus, dass der OpenGL-Status beim Aufruf dieser Funktion auf die Standardwerte gesetzt ist oder 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 vor dem Aufruf dieser Funktion von Quick geändert worden sein könnte.

Hinweis: Es wird empfohlen, QQuickOpenGLUtils::resetOpenGLState() vor der Rückkehr aufzurufen. Dadurch wird der vom Qt Quick Renderer verwendete OpenGL-Zustand zurückgesetzt und somit eine Beeinflussung durch die vom Rendering-Code in dieser Funktion vorgenommenen Zustandsänderungen vermieden.

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

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

Verwenden Sie diese Funktion, um den Renderer mit Änderungen zu aktualisieren, die an dem Element vorgenommen wurden. item ist das Element, das diesen Renderer instanziiert hat. Die Funktion wird einmal aufgerufen, bevor der FBO erstellt wird.

Wenn das Element beispielsweise eine Farbeigenschaft hat, die von QML gesteuert wird, sollte man QQuickFramebufferObject::update() aufrufen und synchronize() verwenden, um die neue Farbe in den Renderer zu kopieren, damit sie für das Rendering 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 von render() aus aufgerufen werden, um zu erzwingen, dass der FBO vor dem nächsten Bild erneut gerendert wird.

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

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