最初の投稿で中断したところからお話ししましょう。OpenGLとVulkan上で実行する例を見てきました。RenderDocでVulkanフレームキャプチャを確認しました。Quickがフレームをレンダリングする方法をより深く掘り下げて理解したい人(または、アプリケーションのレンダリングにおけるトラブルシューティング)にも役立ちます。5.14がmacOSおよびWindowsで提供するものについて焦点を当てています。1)を指定してqt5-cinematic-experienceデモを実行すると、次のようになります。QuickでQRhiベースのレンダリングパスを有効にし、デフォルトでMetalを使用します。5.12で導入されたcocoaプラットフォームプラグインのMetalサポートに依存します。MetalSurfaceを使用したQWindowは、内部でCAMetalLayerを使用するNSViewを取得します。それがまさにQRhiのMetalバックエンドに必要なものなのです。SurfaceTypeを取得するためです。Quickのスレッド化されたレンダーループで実行できることです。10.14では特定のNSOpenGLContextおよび関連APIのスレッドの問題により、QtはmacOS上のOpenGLでスレッド化されたループを無効にし、代わりに”basic”ループをデフォルト設定としています。Quickアニメーションの滑らかさは多少落ちてしまいます。Metalの場合(現在分かっている範囲では)スレッド化しても問題はありません。そのため、スレッド化されたレンダーループを再びデフォルトに設定できます。(レンダリングループのデフォルトの選択は、QSG_RENDER_LOOP環境変数を設定することでオーバーライドできます。RenderDocを紹介しました。Metalの場合、XCodeとその組み込みGPUフレームキャプチャを使用できます。macx-xcode)を実行することです。Cmd-Rを押すと、デバッガーが起動します。私たちもQtの開発中によく使っています。GPUキャプチャが利用できない場合は、製品->スキーム->スキームの編集...をチェックし、GPUフレームキャプチャをMetalに変更します。XCodeでアプリケーションのデバッグビルドを実行すると、Metal検証が有効になります。APIが誤った方法で使用されると、XCodeは警告を出してプログラムの実行を中断します。API検証は有効にできません。tvOSについてこの記事の編集時点では、プラットフォームプラグインの、Metal関連の部分が不足しています。これは、これらのプラットフォームでQRhiのMetalバックエンドがまだテストされていないことも意味します。QuickセクションではmacOSのみに言及しています。サポートは近い将来、おそらく5.15に追加される予定です。Languageに変換することも選択可能です。これには、Vulkan対応のQtビルドが必要ですが、Appleプラットフォームではそのままでは使用できません。詳細については、この投稿を参照してください。重要なのは、-Iをconfigureに渡して、QT_VULKAN_LIBを設定することにより、確実に実行時にライブラリが見つかるようにすることです。このアプローチは、ベストエフォートベースでのみサポートされます。Appleプラットフォームでは、Metal経由でレンダリングする方法が最も確実にサポートされるようになります。5.14ビルドを使用)でデモアプリケーションを実行すると、次のことがわかります。10.13でこれを実行する際に問題が発生し、ロックアップやクラッシュが発生することに注意してください。SDKを新しいバージョン(1.0.121)にアップグレードすると、新たな問題が発生してアプリケーションを起動できなくなりました。(https://github.com/KhronosGroup/MoltenVK/issues/695に似たものを取得し続けていました)これについては後で調査します。Miniでは、スクリーンショットに見られるように、結果はかなり良好です。WindowsWindowsは、最も多くの選択肢があるプラットフォームです。11、Vulkan、OpenGLの3つをWindowsで使用できます。3つだけなのか、4つ目としてDirect3D12が入らないのかと、疑問に思われることとおもいます。現時点ではD3D12バックエンドはありません。予定はされていますが、時期が決まっていないため、後から変更になる可能性があります。Quick用の試験的なD3D12バックエンドが、アーキテクチャ上非推奨となっていることに注意してください。(複数のグラフィックスAPIの問題にまったく新しい方法で取り組むため)。6で削除される場合があります。通常どおり、VulkanまたはOpenGLが必要な場合は、QSG_RHI_BACKENDでオーバーライドします。11.0ではなく11.1が必要であることに注目していただきたいのですが、これは主にVSSetConstantBuffers1(および関連するPSおよびCSバリアント)が必要であることが理由です。7上で実行したい場合を除き、これは問題ではありません。10のみに言及しています。6のサポート対象プラットフォームを維持する場合のみ)。Direct3Dデバッグレイヤーを有効にするには、環境変数QSG_RHI_DEBUG_LAYERを1に設定します。SDKから)使用可能な限りVulkanでも機能します。Qtは、メッセージを(qDebugを介して出力されたかのように)簡便にデバッグ出力に送信します。VulkanとOpenGLはWindowsで期待どおりに動作するはずなので、ここでこれ以上の説明はしません。VulkanおよびMetalと同様に、QRhiのOpenGLバックエンドは、既存のOpenGLおよびプラットフォーム関連の機能(QOpenGLContext、QOpenGLFunctions、およびWindowsプラットフォームプラグインの基礎(WGL、EGL)など)の一部に基づいて構築されます。Quickアプリケーションに適用されるすべてが、ここにも適用されます。6で直接の依存関係から削除できることが期待されています。6アプリケーションには十分でしょう。パート3では、このQRhiの内容とシェーダーの処理方法について、より深いところまで見ていきましょう。