テンプレート
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>