シーングラフ - QML下のメタル
Qt Quick シーン下で Metal を直接レンダリングする方法を示します。
Metal Under QML の例では、QQuickWindow::beforeRendering() とQQuickWindow::beforeRenderPassRecording() シグナルを使用して、Qt Quick シーンの下にカスタム Metal コンテンツを描画する方法を示します。このシグナルは、シーングラフがレンダリングを開始する前の、各フレームの開始時に発行されます。したがって、このシグナルへの応答として実行される Metal の描画コールは、Qt Quick のアイテムの下にスタックされます。カスタムメタルコマンドは、シーングラフが使用するのと同じレンダーコマンドエンコーダで同じコマンドバッファに記録されるため、2つのシグナルが存在します。beforeRendering()は、MTLRenderCommandEncoderが使用可能になる前のフレーム開始時に発行されるため、それだけでは十分ではありません。beforeRenderPassRecording() にも接続することで、アプリケーションは必要なネイティブオブジェクトにアクセスすることができる。
別の方法として、Qt Quick シーンの上にメタルコンテンツをレンダリングしたいアプリケーションは、QQuickWindow::afterRendering() とQQuickWindow::afterRenderPassRecording() シグナルに接続することでレンダリングできます。
この例では、メタルレンダリングに影響を与える値をQMLに公開する方法についても説明します。QMLファイル内のNumberAnimation を使用してスレッショルド値をアニメーション化し、この値はスクサークルを描画するMetalシェーダプログラムによって使用されます。
この例は、OpenGL Under QML、Direct3D 11 Under QML、Vulkan Under QMLの例とほぼ同じで、ネイティブAPIが異なるだけで、すべて同じカスタムコンテンツをレンダリングします。
© 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.