QtShader Tools 概要

QtShader Tools モジュールは、Khronos SPIR-V Web サイトで説明されている SPIR-V オープンソースエコシステムをベースにしています。SPIR-Vへのコンパイルにはglslangが使用され、翻訳と反映はSPIRV-Crossを介して行われます。

Qtアプリケーションやライブラリでシェーダーコードを一度だけ記述するために、すべてのシェーダーは単一の言語で記述され、それがSPIR-Vにコンパイルされることが期待されています。このシェーディング言語は、現時点ではVulkan互換のGLSLです。これは、Qt 5.xが期待するOpenGLスタイルのGLSLとは異なります。違いの概要についてはGL_KHR_vulkan_glslspecificationを参照してください。

GLSL、HLSL、Metal Shading Languageなどの他のシェーディング言語のソースコードは、SPIR-Vバイトコードをリフレクション情報(入力、出力、シェーダーリソース)とともに翻訳して生成されます。特にGLSLについては、複数のバリアント、つまりGLSL ES 100、GLSL ES 300、GLSL 120および150といった異なるGLSLバージョンに適したソースコードも生成されます。そして、これをシリアライズ可能なQShader コンテナオブジェクトにまとめ、通常は.qsb ファイルとしてディスクに保存します。Qt Rendering Hardware Interface は、QShader インスタンスを直接消費し、実行時に使用するグラフィックス API に最適なシェーダーソースまたはバイトコードを選択します。QShader オブジェクトは通常、アプリケーションに同梱されている.qsb ファイル、または Qt Resource System の Qt 自身からデシリアライズされます。

プラットフォームによっては、シェーダーのソースコードを SPIR-V に似た中間フォーマットにコンパイルするオプションを提供しています。これには、プラットフォーム固有のツールを実行する必要があります。Direct 3D の場合、qsb ツールは、HLSL ソースコードが生成されると、Windows SDK から fxc ツールを呼び出すオプションを提供します。このツールは、HLSL ソースコードをfxc によって生成されたDXBC バイナリに置き換えます。これは、コンパイルの第一段階(HLSLソースからDXBCへのコンパイル) をアプリケーション自身で行う必要がなくなるため、アプリケーションのランタイムパフォー マンスにプラスの効果をもたらす可能性がある。macOS と iOS については、XCode SDK が同様のツールを提供しています。このアプローチの欠点は、これらのツールの実行がそれぞれのプラットフォーム上でしかできないことだ。そのため、アプリケーションのビルド時にシェーダー・コンディショニングを行うことで、暗黙のうちにターゲット・プラットフォームと、どのプラットフォーム固有のツールを呼び出すことができるかについて必要な知識が得られるため、qsb の CMake 統合と組み合わせて使用するのが最適です。

次の図は、qsb ツールを呼び出す間に起こるステップを説明しています:

Qt シェーダー・コンディショニング・システムの主なコンポーネントは次のとおりです:

  • qsb コマンドラインツール
  • qsb ツールの CMake インテグレーション
  • QShader ( モジュールの一部)QtGui
  • QShaderBaker (このモジュールの一部、 ツールに相当するライブラリ)qsb

典型的な使用例Qt Quick

アプリケーション開発者は通常、次のいずれかを持つQt Quick シーンにおいてカスタムシェーダーコードを扱います:

  • ShaderEffect 項目
  • QQuickItem QSGMaterial をサブクラス化することによって構築されたカスタム マテリアルと組み合わせてシーン グラフ ノードを使用するサブクラス。

例えば、次の QML スニペットを考えてみましょう:

ShaderEffect {
    width: 100; height: 100
    fragmentShader: "myeffect.frag.qsb"
}

ここで、fragmentShader のURLは、.qml ファイルの場所から相対的に、.qsb ファイルを参照しています。アプリケーションは、.qml ファイルの隣にmyeffect.frag.qsb を配置します。このファイルをVulkanスタイルのGLSLソースから生成するには(これ自体はアプリケーションと一緒に出荷する必要はありません)、アプリケーションは直接またはCMake経由でqsb ツールを使用する必要があります。

Qt Quick 3Dでの典型的な使用例

Qt Quick 3D は、 モジュールを直接使用して、実行時にシェーダー・コンディショニングを行います。さらに、シェーダー・コンパイラーや他のツールへのランタイム依存が理想的でない場合に備えて、ビルド時にマテリアルのシェーダーを事前に生成するためのソリューションも提供します。いずれの場合も、 3D独自のフレームワークとツールによってカプセル化されているため、開発者は ツールで直接作業する必要はありません。Shader Tools Qt Quick qsb

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