cbuffer ConstantBuffer : register(b0) { float4x4 qt_Matrix; float qt_Opacity; float weight1; float weight2; float weight3; float weight4; float weight5; float spread; float4 color; }; Texture2D source1 : register(t0); SamplerState sourceSampler1 : register(s0); Texture2D source2 : register(t1); SamplerState sourceSampler2 : register(s1); Texture2D source3 : register(t2); SamplerState sourceSampler3 : register(s2); Texture2D source4 : register(t3); SamplerState sourceSampler4 : register(s3); Texture2D source5 : register(t4); SamplerState sourceSampler5 : register(s4); float linearstep(float e0, float e1, float x) { return clamp((x - e0) / (e1 - e0), 0.0, 1.0); } float4 main(float4 position : SV_POSITION, float2 coord : TEXCOORD0) : SV_TARGET { float4 sourceColor = source1.Sample(sourceSampler1, coord) * weight1; sourceColor += source2.Sample(sourceSampler2, coord) * weight2; sourceColor += source3.Sample(sourceSampler3, coord) * weight3; sourceColor += source4.Sample(sourceSampler4, coord) * weight4; sourceColor += source5.Sample(sourceSampler5, coord) * weight5; sourceColor = lerp(float4(0.0, 0.0, 0.0, 0.0), color, linearstep(0.0, spread, sourceColor.a)); return sourceColor * qt_Opacity; }