
#version 450 core
layout(location = 0) in vec3 pos;
layout(location = 1) in vec2 tex_coords;
layout(location = 2) in vec4 color;
layout(location = 3) in float tex_slot;
layout(location = 4) in vec3 translation;
layout(location = 5) in float angle;
layout(location = 6) in vec3 scale;
layout(location = 7) in vec3 tex_is_grey_scale;

layout (location = 0) out vec2 f_tex_coords;
layout (location = 1) out vec4 f_vert_color;
layout (location = 2) flat out int f_tex_index;
layout (location = 3) flat out int f_tex_is_grey;

uniform mat4 projview;

void main()
{
    f_tex_index = int(tex_slot);
    f_tex_coords = tex_coords;
    f_vert_color = color;
    f_tex_is_grey = int(tex_is_grey_scale);
    // mat4 ModelTrans = mat4( 
    // vec4( scale.x * cos(angle), scale.x * -sin(angle), 0.0,     0.0), 
    // vec4( scale.y * sin(angle), scale.y *  cos(angle), 0.0,     0.0),
    // vec4( 0.0,                    0.0,                     scale.z, 0.0),
    // vec4( translation.xyz,                                          1.0)
    // );

    mat4 Translation = mat4( 
        vec4( 1.0, 0.0, 0.0, 0.0), 
        vec4( 0.0, 1.0, 0.0, 0.0),
        vec4( 0.0, 0.0, 1.0, 0.0),
        vec4( translation.xyz, 1.0));

    mat4 Rotation = mat4( 
        vec4( cos(angle), -sin(angle), 0.0, 0.0), 
        vec4( sin(angle), cos(angle), 0.0, 0.0),
        vec4( 0.0, 0.0, 1.0, 0.0),
        vec4( 0.0, 0.0, 0.0, 1.0));

    mat4 Scale = mat4(
        vec4(scale.x, 0.0, 0.0, 0.0),
        vec4(0.0, scale.y, 0.0, 0.0),
        vec4(0.0, 0.0,scale.z, 0.0),
        vec4(0.0, 0.0, 0.0, 1.0));

   // mat4 model = Translation * RotationScale;
    //gl_Position =  Translation * vec4(pos, 1.0);

    mat4 model = mat4( vec4(1.0, 0.0, 0.0, 0.0), vec4(0.0, 1.0, 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0));
    model = model * Translation;
    model = model * Rotation;
    model = model * Scale;

    gl_Position = projview * model * vec4(pos, 1.0);
}