attribute vec2 m_Position;
attribute vec4 m_Colour;
attribute vec2 m_TexCoord;
attribute vec4 m_TexRect;
attribute float m_Time;

varying vec2 v_DrawingPosition;
varying vec2 v_MaskingPosition;
varying vec4 v_Colour;
varying vec2 v_TexCoord;
varying vec4 v_TexRect;

uniform mat4 g_ProjMatrix;
uniform mat3 g_ToMaskingSpace;
uniform mat3 g_ToDrawingSpace;

uniform float g_FadeClock;

void main(void)
{
    // Transform to position to masking space.
    vec3 maskingPos = g_ToMaskingSpace * vec3(m_Position, 1.0);
    v_MaskingPosition = maskingPos.xy / maskingPos.z;

    // Transform to position to masking space.
    vec3 drawingPos = g_ToDrawingSpace * vec3(m_Position, 1.0);
    v_DrawingPosition = drawingPos.xy / drawingPos.z;

    v_Colour = vec4(m_Colour.rgb, m_Colour.a * pow(clamp(m_Time - g_FadeClock, 0.0, 1.0), 1.7));
     
    v_TexCoord = m_TexCoord;
    v_TexRect = m_TexRect;
    
    gl_Position = g_ProjMatrix * vec4(m_Position, 1.0, 1.0);
}