#version 450

// World to view projection matrix to correctly position the vertex on screen
uniform mat4 WVP;
// Matrix to transform normals from local into world space
uniform mat3 N;

// Position and normal vectors of the current vertex in local space
// Leenkx packs the vertex data to preserve memory, so nor.z values are
// saved in pos.w
in vec4 pos; // pos.xyz, nor.w
in vec2 nor; // nor.xy

// Normal vector in world space
out vec3 wnormal;

void main() {
	wnormal = normalize(N * vec3(nor.xy, pos.w));
	gl_Position = WVP * vec4(pos.xyz, 1.0);
}