#version 330

layout (std140) uniform Matrices {
	mat4 m_pvm;
	mat3 m_normal;	
	mat4 m_model;
	mat4 m_viewModel;
};

layout (std140) uniform Materials {
	vec4 diffuse;
	vec4 ambient;
	vec4 specular;
	vec4 emissive;
	float shininess;	
};

layout(location=0) in vec4 position;	// local space
layout(location=1) in vec3 normal;		// local space

// the data to be sent to the fragment shader
out Data {
	vec4 colr;
} DataOut;

void main () {
	mat4 mvm = mat4(1.0);

	//preserve modelgeometry scaling values
	mvm[0][0] =  m_model[0][0]; 
	mvm[1][1] =  m_model[1][1]; 
	mvm[2][2] =  m_model[2][2];
	mvm[3][3] =  m_model[3][3];

	//preserve translation components
	mvm[3][0] = m_pvm[3][0];
	mvm[3][1] = m_pvm[3][1];
	mvm[3][2] = m_pvm[3][2];
	
	gl_Position = mvm*position;
	
	DataOut.colr = diffuse;
}