Qt XMLShader Tools の概要
QtShader Tools モジュールは、Khronos SPIR-V ウェブサイトに記載されている SPIR-V オープンソース・エコシステムを基盤としています。SPIR-V へのコンパイルにはglslang が使用され、変換およびリフレクションはSPIRV-Cross を通じて行われます。
Qtアプリケーションやライブラリでシェーダーコードを一度記述できるようにするため、すべてのシェーダーは単一の言語で記述され、その後SPIR-Vにコンパイルされることが想定されています。このシェーディング言語は、現時点ではVulkan互換のGLSLです。これは、OpenGLスタイルのGLSLを想定しているQt 5.xとは異なります。 違いの概要については、GL_KHR_vulkan_glsl仕様を参照してください。
GLSL、HLSL、Metal Shading Language などの他のシェーディング言語のソースコードは、SPIR-V バイトコードの変換と、リフレクション情報(入力、出力、シェーダーリソース)を組み合わせて生成されます。 特にGLSLの場合、これには複数のバリアント(GLSL ES 100、GLSL ES 300、GLSL 120および150など、異なるGLSLバージョンに適したソースコード)の生成も含まれます。これらはその後、シリアライズ可能なQShader コンテナオブジェクトにパックされ、通常は.qsb ファイルとしてディスク上に保存されます。 Qtレンダリング・ハードウェア・インターフェースは、QShader インスタンスを直接利用し、実行時に使用されるグラフィックスAPIに最適なシェーダーソースまたはバイトコードを選択します。QShader オブジェクトは通常、アプリケーションまたはQt自体に同梱されている.qsb ファイルから、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ソース(これ自体はアプリケーションに同梱する必要はありません)からそのファイルを生成するには、アプリケーションはqsb ツールを直接、またはCMakeを介して使用する必要があります。
Qt Quick 3D での一般的な使用方法
Qt Quick 3Dでは、実行時にシェーダーのコンディショニングを行うために、Shader Tools モジュールを直接使用します。 さらに、実行時にシェーダーコンパイラやその他のツールに依存することが望ましくない場合のために、ビルド時にマテリアルのシェーダーを事前生成するソリューションも提供しています。いずれの場合も、qsb ツールはQt Quick 3D独自のフレームワークおよびツールによってカプセル化されているため、開発者はこのツールを直接操作する必要はありません。
© 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.