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 アイテムのシーン グラフ リソースがクリーンアップされると自動的に削除されます。
この関数は、レンダリング スレッドで呼び出されます。
[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()
現在のFBOを無効にするには、synchronize ()の間にこの関数を呼び出します。これにより、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 が作成される前に 1 回呼び出されます。
たとえば、アイテムに QML で制御されるカラー プロパティがある場合、QQuickFramebufferObject::update ()を呼び出し、synchronize() を使用して新しいカラーをレンダラーにコピーし、次のフレームのレンダリングに使用できるようにします。
この関数は、レンダラーとアイテムがお互いのメンバを安全に読み書きできる唯一の場所です。
[protected]
void Renderer::update()
FBO を再度レンダリングする場合は、この関数を呼び出します。
この関数をrender() から呼び出すと、次のフレームの前に FBO を再度レンダリングさせることができます。
注: この関数はレンダラー内部から使用する必要があります。GUIスレッドでアイテムを更新するには、QQuickFramebufferObject::update ()を使用します。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。