模板
SDSL 支持着色器模板。与许多模板系统不同,sdsl 要求强类型的模板。可用类型包括:
- HLSL 中的值类型(float、int、float2、float3、float4)
- 2D 纹理
- 采样器状态(sampler state)
- 语义(semantic,用于替换变量上的语义)
- 链接类型(link type,用于替换 link 标注)
实例化后的着色器与其他着色器的行为完全相同。value、texture 和 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);
}
};
// 要实例化该着色器,请使用:
TemplateShader<1.0f, Texturing.Texture0, Texturing.Sampler0, TEXCOORD0, MyColorLink>