IN(0) vec2 in_position;
IN(1) vec2 in_tex_coord_0;

UNIFORM_BEGIN
  UNIFORM_V(vec2 scale)
  UNIFORM_V(vec2 offset)
  UNIFORM_V(vec2 rotation)
  UNIFORM_V(vec2 tex_offset)
  UNIFORM_V(vec2 tex_scale)
  UNIFORM_V(mat4 projection)
  UNIFORM_F(vec4 color)
UNIFORM_END

OUT(0) vec2 tex_coord_0;

void main() {
  // Simple 2d transform.
  vec2 position = in_position;
  position *= PARAM(scale);
  position = vec2(position.x * PARAM(rotation).y + position.y * PARAM(rotation).x,
                  position.y * PARAM(rotation).y - position.x * PARAM(rotation).x);
  position += PARAM(offset);

  tex_coord_0 = (in_tex_coord_0 + PARAM(tex_offset)) * PARAM(tex_scale);

  gl_Position = PARAM(projection) * vec4(position, 0.0, 1.0);
}