シェーダーの用意 - yoshimune/LearningDirectX11 GitHub Wiki
シェーダーの作成
頂点シェーダーとピクセルシェーダーを作成します。 シェーダーはプログラムですが、アプリケーション中ではリソースと同等の扱いです。シェーダーはテキストファイルとして記述し、アプリケーションのビルド時かランタイム中にコンパイルしてバイトコードに変換します。このバイトコードをデバイスに渡します。今回の例では、アプリケーションビルド時にコンパイルする方式を採用しています。
シェーダーコードを用意する
シェーダーはテキストファイルとして用意します。VisualStudio2017の場合は、プロジェクト→新しい項目の追加でテキストファイルを追加してください。
追加したファイルを右クリックし、プロパティを開いてください。構成コンパイラ/HLSLコンパイラを選択し、シェーダーの種類を頂点シェーダーまたはピクセルシェーダーに設定してください。
これでシェーダーコンパイルの設定は完了です。
シェーダーコード
シェーダーコードを記載します。まずは頂点シェーダーです。
// Vertex Shader
cbuffer ConstBuff : register(b0)
{
matrix mtxProj;
matrix mtxView;
matrix mtxWorld;
};
struct VS_INPUT
{
float3 Pos : POSITION;
};
struct PS_INPUT
{
float4 Pos : SV_POSITION;
};
PS_INPUT main(VS_INPUT input)
{
PS_INPUT output = (PS_INPUT)0;
output.Pos = mul(float4(input.Pos, 1), mtxWorld);
output.Pos = mul(output.Pos, mtxView);
output.Pos = mul(output.Pos, mtxProj);
return output;
}
cbuffer ConstBuff : register(b0)
定数バッファですstruct VS_INPUT
: 頂点シェーダー入力データですstruct PS_INPUT
: ピクセルシェーダーにわたす出力データですPS_INPUT main(VS_INPUT input)
: プログラムエントリポイントです。モデル・ビュー・プロジェクション変換のみを行う至極単純なプログラムになっています。
次にピクセルシェーダーです
// Pixel Shader
cbuffer ConstBuff : register(b0)
{
matrix mtxProj;
matrix mtxView;
matrix mtxWorld;
};
struct PS_INPUT
{
float4 Pos : SV_POSITION;
};
float4 main(PS_INPUT input) : SV_Target
{
return float4(1.0,1.0,1.0,1.0);
}
cbuffer ConstBuff : register(b0)
定数バッファですstruct PS_INPUT
: ピクセルシェーダーの入力データですfloat4 main(PS_INPUT input) : SV_Target
: プログラムエントリポイントです。白く塗りつぶすだけです。
シェーダーコンパイル
アプリケーションをビルドするとシェーダーもコンパイルされます。.csoという形式で出力されます。どこに出力されるかはプロジェクト設定に依存するので注意してください。