Texture2D xTexture; sampler TextureSampler : register (s0) = sampler_state { Texture = ; }; Texture2D xStencil; sampler StencilSampler = sampler_state { Texture = ; }; float aCutoff; float4x4 wearableUvToClipperUv; float clipperTexelSize; float stencilSample(float2 texCoord, float2 offset) { return tex2D( StencilSampler, mul(float4(texCoord.x, texCoord.y, 0, 1), wearableUvToClipperUv).xy + offset).a; } float4 main(float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { float4 c = tex2D(TextureSampler, texCoord) * color; float minStencil = stencilSample(texCoord, float2(0,0)); minStencil = min(minStencil, stencilSample(texCoord, float2(-clipperTexelSize,0))); minStencil = min(minStencil, stencilSample(texCoord, float2(clipperTexelSize,0))); minStencil = min(minStencil, stencilSample(texCoord, float2(0,-clipperTexelSize))); minStencil = min(minStencil, stencilSample(texCoord, float2(0,clipperTexelSize))); float aDiff = minStencil - aCutoff; clip(aDiff); return c; } technique StencilShader { pass Pass1 { PixelShader = compile ps_2_0 main(); } }