#version 330 core

layout(location=0) in vec3 position;
layout(location=1) in vec3 normal;
layout(location=2) in vec2 uv;

uniform mat3 normal_mat;
uniform mat4 model;

layout (std140) uniform Common {
  mat4 projection;
  mat4 view;
  vec3 camera_position;
};

// interface block
out VS_OUT {
  vec3 vert_normal;
  vec3 frag_position;
  vec2 uv_coords;
} vs_out;

void main() {
  vs_out.frag_position = vec3(model * vec4(position, 1.0));
  vs_out.vert_normal   = normal_mat * normal;
  vs_out.uv_coords     = uv;

  gl_Position = projection * view * model * vec4(position, 1.0);
};
