#include struct PS_INPUT { float2 TexCoord : TEXCOORD0; }; struct PS_OUTPUT { fpart4 Color : COLOR0; }; sampler2D MapColor; const fpart4x3 LinearTransfo = fpart4x3( 1,0,0, 0,1,0, 0,0,1, 0,0,0 ); const fpart3 ContrastPower = fpart3(1,1,1); #define DLinearTransfo #define DContrast fpart3 Contrast(fpart3 _Input) { bool3 IsAboveHalf = _Input > 0.5 ; fpart3 ToRaise = saturate(2*(IsAboveHalf ? 1-_Input : _Input)); fpart3 Output = 0.5*pow(ToRaise, ContrastPower); Output = IsAboveHalf ? 1-Output : Output; return Output; } ps_2_0 PS_OUTPUT psMain(const PS_INPUT v) { PS_OUTPUT Output = (PS_OUTPUT) 0; fpart4 Color = tex2D(MapColor, v.TexCoord); Output.Color.a = Color.a; #ifdef DLinearTransfo Color.a = 1; Color.rgb = mul(Color, LinearTransfo); #endif #ifdef DContrast Color.rgb = Contrast(Color.rgb); #endif Output.Color.rgb = Color; return Output; }