// Copyright 2011 Riccardo Monica

#version 400

uniform vec3 light1position;
uniform vec3 light1diffuse;
uniform vec3 light1specular;
uniform vec3 light1ambient;

vec4 ApplyLight(in vec4 oColor, in vec3 relativepos, in vec3 normal,in vec3 matspecular,in float matshininess)
  {
  vec3 intensity = vec3(0.0,0.0,0.0);

  vec3 lightrelative = normalize(light1position - relativepos); // incident light vector
      
  /* ambient */
  intensity += light1ambient * oColor.rgb;

  float dotp = dot(lightrelative,normal);
  if (dotp > 0.0) /* if face is not oriented towards light, skip specular and diffuse */
    {
    /* diffuse */
      {
      vec3 diffuse = light1diffuse * dotp * oColor.rgb;
      intensity += diffuse;
      }
    /* specular */
      {
      vec3 reflected = reflect(lightrelative,normal);
      vec3 viewr = normalize(relativepos);
      float weight = pow(max(0.0,dot(reflected,viewr)),matshininess);
      intensity += light1specular * weight * matspecular;
      }
    }

  return vec4(clamp(intensity,0.0,1.0),oColor.a);
  }
