シェーダーの用意 - 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という形式で出力されます。どこに出力されるかはプロジェクト設定に依存するので注意してください。