Table of Contents

模板

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>

另请参阅