#include "common.h"

struct Appdata
{
    float4 Position     : POSITION;
    float2 Uv           : TEXCOORD0;
    float4 Color        : COLOR0;
};

struct VertexOutput
{
    float4 HPosition    : POSITION;

    float2 Uv           : TEXCOORD0;
    float4 Color        : COLOR0;

#if defined(PIN_FOG)
    float FogFactor     : TEXCOORD1;
#endif
};

uniform float4 UIParams;  // x = luminance sampling on/off, w = z offset
TEX_DECLARE2D(DiffuseMap, 0);

VertexOutput UIVS(Appdata IN)
{
    VertexOutput OUT = (VertexOutput)0;

    OUT.HPosition = mul(G(ViewProjection), IN.Position);
    OUT.HPosition.z -= UIParams.w; // against z-fighting

    OUT.Uv = IN.Uv;
    OUT.Color = IN.Color;

#if defined(PIN_FOG)
    OUT.FogFactor = (G(FogParams).z - OUT.HPosition.w) * G(FogParams).w;
#endif

    return OUT;
}

float4 UIPS(VertexOutput IN): COLOR0
{
    float4 base;

    if (UIParams.x > 0.5)
        base = float4(1, 1, 1,tex2D(DiffuseMap, IN.Uv).r);
    else
        base = tex2D(DiffuseMap, IN.Uv);

    float4 result = IN.Color * base;

#if defined(PIN_FOG)
    result.rgb = lerp(G(FogColor), result.rgb, saturate(IN.FogFactor));
#endif

   return result;
}
