cat_engine 1.0.0-alpha0

A 2D graphics engine with audio output support
#version 330 core

layout (location = 0) in vec2 vertex_position;
layout (location = 1) in vec4 vertex_colour;

uniform vec4 viewport;
uniform uint draw_mode;
uniform vec2 vertex_shift; // [dx, dy]
uniform vec4 vertex_rotation; // [cos, sin, rotation_center]

out vec4 fragment_colour;

void main() {
    fragment_colour = vec4(vertex_colour);

    vec2 position = vec2(vertex_position);

    if ((draw_mode & 1) == 1){
        position += vertex_shift;
    }

    if ((draw_mode & 2) == 2){
        float cos = vertex_rotation.x;
        float sin = vertex_rotation.y;
        vec2 rotation_center = vec2(vertex_rotation.zw);

        position -= rotation_center;
        position = vec2(position.x * cos - position.y * sin, position.x * sin + position.y * cos);
        position += rotation_center;
    }

    vec2 viewport_offset = vec2(viewport.xy);
    vec2 viewport_size = vec2(viewport.zw);

    position = vec2(
        2 * (position.x + viewport_offset.x) / viewport_size.x - 1.0,
        1.0 - 2 * (position.y + viewport_offset.y) / viewport_size.y
    );

    gl_Position = vec4(position, 0.0, 1.0);
}