uniform mat4 m_LightViewProjectionMatrix0; uniform mat4 m_LightViewProjectionMatrix1; uniform mat4 m_LightViewProjectionMatrix2; uniform mat4 m_LightViewProjectionMatrix3; uniform mat4 g_WorldViewProjectionMatrix; uniform mat4 g_WorldMatrix; varying vec4 projCoord0; varying vec4 projCoord1; varying vec4 projCoord2; varying vec4 projCoord3; varying float shadowPosition; 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); shadowPosition = gl_Position.z; // get the vertex in world space vec4 worldPos = g_WorldMatrix * vec4(inPosition, 1.0); // populate the light view matrices array and convert vertex to light viewProj space projCoord0 = biasMat * m_LightViewProjectionMatrix0 * worldPos; projCoord1 = biasMat * m_LightViewProjectionMatrix1 * worldPos; projCoord2 = biasMat * m_LightViewProjectionMatrix2 * worldPos; projCoord3 = biasMat * m_LightViewProjectionMatrix3 * worldPos; }