シーングラフ - QML 環境下での Metal

Qt Quick シーン内でMetalを使用して直接レンダリングする方法を示します。

Qt Quickのシーン内でMetalを使用してレンダリングされたアニメーション付きスクエクルに、テキストを重ねたもの

「Metal Under QML」の例では、アプリケーションがQQuickWindow::beforeRendering()およびQQuickWindow::beforeRenderPassRecording()シグナルを利用して、Qt Quick シーン内でカスタムMetalコンテンツを描画する方法を示しています。このシグナルは、各フレームの開始時、シーングラフがレンダリングを開始する前に発火するため、このシグナルに応答して行われるMetalの描画呼び出しは、すべてQt Quick アイテムの下にスタックされます。 シグナルが2つあるのは、カスタムMetalコマンドが、シーングラフが使用するものと同じレンダリングコマンドエンコーダを介して、同じコマンドバッファに記録されるためです。beforeRendering()だけではこれに対応できません。なぜなら、このシグナルはフレームの開始時に発火し、その時点ではMTLRenderCommandEncoderが利用できないからです。 さらに beforeRenderPassRecording() にも接続することで、アプリケーションは必要なネイティブオブジェクトにアクセスできるようになります。

あるいは、Qt Quick シーンの上にMetalコンテンツをレンダリングしたいアプリケーションは、QQuickWindow::afterRendering()およびQQuickWindow::afterRenderPassRecording()シグナルに接続することで、これを実現できます。

この例では、QML に公開された値が Metal のレンダリングに影響を与える仕組みについても確認します。QML ファイル内のNumberAnimation を使用してしきい値をアニメーション化し、この値はスクエアサークルを描画する Metal シェーダープログラムで使用されます。

この例は、多くの点で「OpenGL Under QML」、「Direct3D 11 Under QML」、および「Vulkan Under QML」の例と同等であり、これらはすべて、異なるネイティブ API を経由しているだけで、同じカスタムコンテンツをレンダリングしています。

サンプルプロジェクト @ code.qt.io

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