struct vert2frag
{
    float4 position           : POSITION;
    float3 wLightDir          : TEXCOORD0;
    float3 wNormal            : TEXCOORD1;
};

// define inputs from application
struct app2vert
{
    float4 position           : POSITION;
    float3 normal             : NORMAL;
};

vert2frag main(app2vert IN, 
               uniform float4x4 modelViewProj : _GL_MVP,
               uniform float4x4 objToWorldMatrix,
			   uniform float4x4 objToWorldInvTranspMatrix,
               uniform float3 wLightDir,
               uniform float4 wLightPos )
{
    vert2frag OUT;

#ifdef IS_DIRECTIONAL_LIGHT
#else
    float4 wPosition = mul(objToWorldMatrix, IN.position);
    wLightDir = (wLightPos - wPosition).xyz;
#endif

    float4 hNormal = float4(IN.normal, 0);
    float3 wNormal = normalize( (mul(objToWorldInvTranspMatrix, hNormal)).xyz );

#ifdef INVERT_NORMAL
    wNormal = wNormal * -1;
#endif

    OUT.position = mul(modelViewProj, IN.position);
    OUT.wLightDir = wLightDir;
    OUT.wNormal = wNormal;


    return OUT;
}
