#version 330 core uniform vec3 light_color; uniform vec3 light_pos; uniform float ambient_light_strength; uniform float specular_light_strength; uniform uint specular_shininess; vec3 calc_diffuse_light(in vec3 light_dir, in vec3 norm) { float diff = max(dot(norm, light_dir), 0.0); return diff * light_color; } vec3 calc_specular_light( in vec3 light_dir, in vec3 norm, in vec3 view_pos, in vec3 frag_pos ) { vec3 view_direction = normalize(view_pos - frag_pos); vec3 reflect_direction = reflect(-light_dir, norm); float spec = pow(max(dot(view_direction, reflect_direction), 0.0), specular_shininess); return specular_light_strength * spec * light_color; }