#version 330
// Color input from Vertex shader
in vec4 vColor;
in vec3 vNormal;
in vec3 vPosition;

// Final fragment color
out vec4 fColor;

// Light color RGB value
uniform vec3 uLightColor;
// Light object position vector
uniform vec3 uLightPosition;

// Strength ranges 0.0f - 1.0f
uniform float uAmbientStrength;  // 0.2f

void main()
{
  // Ambient lighting
  vec3 ambient = uAmbientStrength * uLightColor;

  // Diffuse lighting
  vec3 norm = normalize(vNormal);
  vec3 lightDir = normalize(uLightPosition - vPosition);
  float diff = max(dot(norm, lightDir), 0.0f);

  vec3 diffuse = diff * uLightColor;

  // Strip vColor to vec3 to drop alpha
  vec3 result = (ambient + diffuse) * vec3(vColor);

  // Final output
  fColor = vec4(result, 1.0f); // Reapply alpha
}