uniform mat4 m_LightViewProjectionMatrix;
uniform mat4 g_WorldViewProjectionMatrix;
uniform mat4 g_WorldMatrix;

varying vec4 projCoord;

attribute vec3 inPosition;

const mat4 biasMat = mat4(0.5, 0.0, 0.0, 0.0,
                          0.0, 0.5, 0.0, 0.0,
                          0.0, 0.0, 0.5, 0.0,
                          0.5, 0.5, 0.5, 1.0);

void main(){
    gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);

    // get the vertex in world space
    vec4 worldPos = g_WorldMatrix * vec4(inPosition, 1.0);

    // convert vertex to light viewProj space
    //projCoord = biasMat * (m_LightViewProjectionMatrix * worldPos);
    vec4 coord = m_LightViewProjectionMatrix * worldPos;
    projCoord = biasMat * coord;
    //projCoord.z /= gl_DepthRange.far;
    //projCoord = (m_LightViewProjectionMatrix * worldPos);
    //projCoord /= projCoord.w;
    //projCoord.xy = projCoord.xy * vec2(0.5, -0.5) + vec2(0.5);

    // bias from [-1, 1] to [0, 1] for sampling shadow map
    //projCoord = (projCoord.xyzw * vec4(0.5)) + vec4(0.5);
}