このページでは

QQuickFramebufferObject::Renderer Class

class QQuickFramebufferObject::Renderer

保護関数

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

詳細な説明

QQuickFramebufferObject::Renderer クラスは、QQuickFramebufferObject のレンダリングロジックを実装するために使用されます。

メンバ関数のドキュメント

[protected] Renderer::Renderer()

新しいレンダラーを構築します。

この関数は、GUIスレッドがブロックされている間に、シーングラフの同期フェーズで呼び出されます。

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

QQuickFramebufferObject 項目のシーングラフリソースがクリーンアップされると、Rendererは自動的に削除されます。

この関数は、レンダリングスレッド上で呼び出されます。

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

この関数は、新しいFBOが必要になったときに呼び出されます。これは最初のフレームで発生します。QQuickFramebufferObject::textureFollowsItemSize がtrueに設定されている場合、項目の寸法が変更されるたびに再度呼び出されます。

返されるFBOには、どのようなアタッチメントでも設定可能です。QOpenGLFramebufferObjectFormat がFBOのマルチサンプリングを指定している場合、Rendererの内部実装は2つ目のFBOを割り当て、マルチサンプリングされたFBOの内容を、テクスチャの表示に使用されるFBOにブリットします。

注:一部の ハードウェアでは 、FBOのサイズが小さい場合に問題が生じることがあります。size はこの点を考慮しているため、サイズを固定値で上書きする際は注意が必要です。最小サイズを64x64に設定しておけば、常に正常に動作するはずです。

注: size はデバイスのピクセル比を考慮しているため、すでに正しいスケーリング係数が適用されています。QQuickFramebufferObject アイテムを含むウィンドウを、設定の異なる画面に移動すると、FBO は自動的に再作成され、この関数は正しいサイズで呼び出されます。

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

現在レンダリングが行われているフレームバッファオブジェクトを返します。

[protected] void Renderer::invalidateFramebufferObject()

synchronize() の実行中にこの関数を呼び出すと、現在の FBO が無効化されます。これにより、createFramebufferObject() によって新しい FBO が作成されます。

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

この関数は、FBOへのレンダリングを行う必要がある際に呼び出されます。この時点でフレームバッファはバインドされており、glViewport はFBOのサイズに合わせて設定されています。

関数が返った後、FBOは自動的にバインド解除されます。

注: この関数が呼び出された時点で OpenGL 状態がすべてデフォルトに設定されていること、あるいは呼び出し間で状態が維持されていることを前提にしてはいけません 。Qt Quick レンダラーとカスタムレンダリングコードの両方が、同じ OpenGL コンテキストを使用します。つまり、この関数が呼び出される前に、Quick によって状態が変更されている可能性があります。

注: 戻り値の返却前に `QQuickOpenGLUtils::resetOpenGLState()` を呼び出すことを推奨します 。これにより、Qt Quick レンダラーが使用するOpenGL状態がリセットされ、この関数内のレンダリングコードによる状態変更が互いに干渉することを防ぐことができます。

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

この関数は、QQuickFramebufferObject::update() の実行結果として呼び出されます。

この関数を使用して、アイテムで発生した変更をレンダラーに反映させます。item はこのレンダラーをインスタンス化したアイテムです。この関数は、FBO が作成される前に一度呼び出されます。

たとえば、アイテムに QML によって制御される color プロパティがある場合、QQuickFramebufferObject::update() を呼び出し、synchronize() を使用して新しい色をレンダラーにコピーし、次のフレームのレンダリングに使用できるようにする必要があります。

この関数内のみ、レンダラーとアイテムが互いのメンバを読み書きしても安全です。

[protected] void Renderer::update()

FBOを再度レンダリングする必要がある場合に、この関数を呼び出します。

この関数は、render() から呼び出すことで、次のフレームの前に FBO の再レンダリングを強制的に実行できます。

注:この関数はレンダラー内部から 使用する必要があります。GUIスレッド上の項目を更新するには、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.