#version 430
layout (binding=0) uniform sampler2D samp;
in vec2 uv;
in vec3 varyingNormal;
in vec3 varyingLightDir;
in vec3 varyingVertPos;
in vec3 varyingHalfVector;
out vec4 color;

struct PositionalLight
{  vec4 ambient;
   vec4 diffuse;
   vec4 specular;
   vec3 position;
};
struct Material
{  vec4 ambient;
   vec4 diffuse;
   vec4 specular;
   float shininess;
};
uniform vec4 globalAmbient;
uniform PositionalLight light;
uniform Material material;

void main(void)
{
    vec3 Normal=normalize(varyingNormal);
    vec3 Light=normalize(varyingLightDir);

    vec3 ViewVec=normalize(-varyingVertPos);
    vec3 H=normalize(varyingHalfVector);

    float cosTheta=dot(Light,Normal);
    float cosPhi=dot(Normal,H);

    vec3 ambient=((globalAmbient * material.ambient) + (light.ambient * material.ambient)).xyz;
    vec3 diffuse=light.diffuse.xyz * material.diffuse.xyz * max(cosTheta, 0.0);
    vec3 specular=material.specular.xyz * light.specular.xyz * pow(max(cosPhi, 0.0f), material.shininess*3.0);

	color=vec4(ambient+diffuse+specular,material.diffuse.w);
}