// -------------------------Tonemap--------------------------------------------
float4 TonemapPass(float4 colorInput)
{
float3 color = colorInput.rgb;
color = saturate(color - Defog * FogColor); // Defog
color *= pow(2.0f, Exposure); // Exposure
color = pow(color, Gamma); // Gamma -- roll into the first gamma correction in main.h ?
//#define BlueShift 0.00 //Blueshift
//float4 d = color * float4(1.05f, 0.97f, 1.27f, color.a);
//color = lerp(color, d, BlueShift);
float3 lumCoeff = float3(0.2126, 0.7152, 0.0722);
float lum = dot(lumCoeff, color.rgb);
float3 blend = lum.rrr; //dont use float3
float L = saturate( 10.0 * (lum - 0.45) );
float3 result1 = 2.0f * color.rgb * blend;
float3 result2 = 1.0f - 2.0f * (1.0f - blend) * (1.0f - color.rgb);
float3 newColor = lerp(result1, result2, L);
//float A2 = Bleach * color.rgb; //why use a float for A2 here and then multiply by color.rgb (a float3)?
float3 A2 = Bleach * color.rgb; //
float3 mixRGB = (A2 * newColor.r, A2 * newColor.g, A2*newColor.b);
color.rgb += ((1.0f - A2) * mixRGB);
//float3 middlegray = float(color.r + color.g + color.b) / 3;
float3 middlegray = dot(color,(1.0/3.0)); //1fps slower than the original on nvidia, 2 fps faster on AMD
float3 diffcolor = color - middlegray; //float 3 here
colorInput.rgb = (color + diffcolor * Saturation)/(1+(diffcolor*Saturation)); //saturation
return colorInput;
}