組み込み

Vulkan、Metal、Direct3D上で実行可能なQt Quick

Published Thursday October 17th, 2019 | Leave a comment
Posted in Dev Loop, macOS, Open GL, Qt Quick, Vulkan, Windows, グラフィックス, 組み込み

この投稿は英語ブログ記事「Qt Quick on Vulkan, Metal, and Direct3D」の和訳です。 Qt 5.14の最初のベータ版公開が近づいているので、主な新機能の一つについてお話したいと思います。この投稿内で、グラフィックスタックの改善点とQt 6に向けての詳細を全てご説明することは難しいので、パート1とパート2にて背景と5.14に関連するものについてお話し、技術的な部分の詳細と今後の方向性については、後に別の投稿でお話しようと思います。 5.14の新機能に関するページ概要:グラフィックスAPIに依存しないシーングラフレンダラーの、最初のプレビューがオプトイン機能として追加されました。これにより、OpenGLの代わりにVulkan、Metal、またはDirect3D 11上でほとんどのQt Quickアプリケーションを実行できます。 Qt 6テクニカルビジョンの投稿でご説明したように、Qt 6の主な目標の1つは、Qt上での直接的なOpenGLの使用をできるだけ避け、Vulkan、Metal、Direct3Dなどの幅広いグラフィックスAPIの利用を可能にすることです。 OpenGL(およびOpenGL ES)も選択肢として当然残ります。その背景にある主な動機は、パフォーマンスを発揮する事だけではなく、OpenGLが利用できないか、もしくは既に望ましくないプラットフォームやデバイス上であっても、Qt Everywhereが今後も確かなもので有り続けることを保証することにもあります。それと同時に、最新かつ低レベルなAPIをベースに構築できるため、パフォーマンスの改善(APIオーバーヘッドの減少によるCPU使用率の低下など)や、Qt Quickおよび最近発表されたQt Quick 3Dのようなモジュールの背後にあるレンダリングエンジンの可能性も広がります。 さらに、プラットフォームで最もサポートされているグラフィックスAPIでレンダリングできることは、Qtを使用してUIをレンダリングしながら独自のネイティブ2Dまたは3Dグラフィックレンダリングを実行するアプリケーションにとって嬉しいポイントです。 そのような場合、使用するグラフィックスAPIの決定に関しては、Qtに主導権が無いことも多々あります。たとえば、macOSのデスクトップアプリケーションが、2DのレンダリングをQt Quickに依存しながら独自の3DコンテンツにMetalを使用したい場合、Qt QuickもMetal経由でレンダリングすると非常に便利です。これは、Qt 5.xのグラフィックスの進化過程を見ていた人には馴染みがあるのでは無いでしょうか。概念的には、OpenGLコアプロファイルコンテキストでの操作のサポートがQt Quickレンダラーに導入されたときと変わりません。Qt Quick自体にはその必要性や関連はありませんが、コアプロファイル機能に関連付けられた外部レンダリングコードを統合できるようにするために、Qt Quick側でそれを認識し、対応できる必要がありました。つまり、これはQt 5で行われてきたことからの自然な流れであり、現在OpenGL以外のグラフィックスAPIをカバーするように拡張されています。 これにより、次の2つの疑問点が上がってくることと思います。 Qt 5.xにどのように関連しているのか?全てQt 6の要素ではないのか? なぜ<なんらかのグラフィックスAPI変換ソリューション>を使用して標準化しないのか? Qt 5.14には何が含まれているのか Qtのグラフィックスの完全なオーバーホールを行うことは、Qt 6のターゲットになっています。しかし、Qt 5.x上での作業や開発を止めて、一度に全てが上手くいくことを期待するのは現実的ではありません。Qt開発者がよく口にするように、APIの最初の試作は”最適”というには満たない傾向にあります。そのため、並行して開発を行う代わりに、QtのUIテクノロジーであるQt Quickに焦点をあてていきます。 Qt 5.14には、新しいQt Quickレンダリングパスのプレビュー版が付属される予定です。 デフォルトでは、非アクティブであるため、アプリケーションに対して目に見える変更は一切ありません。内部では、以前のバージョンと同じダイレクトOpenGLベースのコードパスを通過します。 ただし、新しいアプローチを試してみたい人は、環境変数を設定するか、main関数のC ++ APIを介して要求することでオプトインできます。 ここでは、フィードバックを早期に取得して、Qt 6.0のリリースを待たずに繰り返し、発展させていけることを期待しています。 Qt 5.14ドキュメントをみると、次のようなことがわかります。 QSG_RHIをセットして実行すると、すべてのアプリケーションがすぐに動作するわけではありません。ダイレクトOpenGL呼び出しを実行するシーングラフノード、またはカスタムマテリアルにGLSLシェーダーコードを含むカスタムQQuickItemは、RHIベースのレンダリングを有効にすると機能しなくなります。同じことが、GLSLソースコードを含むShaderEffectアイテムにも当てはまります。 カスタムマテリアルとエフェクトを最新の方法で実行するためのソリューションは、ほとんどがすでに存在しますが、必要に応じてアプリケーションを移行する必要があります。アーリーアダプターは、5.14および5.15のタイムフレームで試すことも出来ますが、Qt […]

Read More
Get started today with Qt Download now