Table of Contents

テンプレート

SDSL では、シェーダーのテンプレート化が可能です。多くのテンプレートシステムとは異なり、SDSL は強力な型付けされたテンプレートを要求します。利用可能な型は次のとおりです。

  • HLSL の値型(float, int, float2, float3, float4)
  • 2Dテクスチャ
  • サンプラーステート
  • セマンティクス(変数のセマンティクスを置き換えるために使用されます)
  • リンクの型(Link アノテーションを置き換えるために使用されます)

インスタンス化されたシェーダーは、他のシェーダーと同じように振る舞います。Value, Texture, Sampler のテンプレートパラメーターは、他の変数と同じようにアクセスできます。ただし、値を変更することはできず、変更しようとするとコンパイルエラーになります。テンプレート変数が間違って使用された場合(例:sampler をセマンティックとして使用)、コンパイルエラーになるはずです。しかし、その動作は公式には不明です。

コード: テンプレート化

shader TemplateShader<float speed, Texture2D myTexture, SamplerState mySampler, Semantic mySemantic, LinkType myLink>
{
	[Color]
	[Link("myLink")]
	float4 myColor;
 
	stream float2 texcoord : mySemantic;
 
	float4 GetValue()
	{
		return speed * myColor * myTexture.Sample(mySampler, streams.texcoord);
	}
};

// シェーダーをインスタンス化: 
// To instantiate the shader, use:
TemplateShader<1.0f, Texturing.Texture0, Texturing.Sampler0, TEXCOORD0, MyColorLink>

関連項目