シェーダの実装
テクスチャーを使用した描画を行うにはシェーダを修正する必要があります。
Shader.hlsl
struct VS_INPUT
{
	float3 Position : POSITION;
	float4 Color : COLOR;
	float2 UV : TEXCOORD; // テクスチャーのUV値
};
struct VS_OUTPUT
{
	float4 Position : SV_POSITION;
	float4 Color : TEXCOORD0;
	float2 UV : TEXCOORD1; // テクスチャーのUV値
};
void VS(
	in VS_INPUT In,
	out VS_OUTPUT Out
)
{
	Out.Position.xyz = In.Position.xyz;
	Out.Position.w = 1.0f;
	Out.Color = In.Color;
	// UV値をPixelShaderに流す
	Out.UV = In.UV;
}
typedef VS_OUTPUT PS_INPUT;
// テクスチャーとサンプラーステートの定義
Texture2D diffuse : register(t0);
SamplerState samplerDiffuse : register(s0);
void PS(
	in PS_INPUT In,
	out float4 OutColor : SV_Target0
)
{
	// UV値を元にテクスチャーから色をサンプリングする
	float4 tex = diffuse.Sample(samplerDiffuse, In.UV);
	// テクスチャーと頂点カラーを掛け合わせる
	OutColor = In.Color * tex;
}
シェーダの実装で変更した個所は主に2点です。
- UV値の入力値を追加
 - テクスチャーとサンプラーステートからのサンプリング処理を追加
 
これだけでシェーダの実装は以外と簡単にできます。
Texture2D diffuse : register(t0);
SamplerState samplerDiffuse : register(s0);
この部分の各行の末尾にある(t0)と(s0)はレジスタ番号を指定しています。
C++のコードからはスロット番号という形で指定するようになっています。