+#version 330 core
+
+in vec3 view_position;
+in vec3 view_normal;
+
+struct DirectionalLight {
+ // direction in view space
+ vec3 direction;
+ vec3 ambient;
+ vec3 diffuse;
+ vec3 specular;
+};
+uniform DirectionalLight global_light = DirectionalLight(
+ vec3(0.57735026918962576451),
+ vec3(0.1),
+ vec3(1.0),
+ vec3(1.0)
+);
+
+
+void main() {
+ // TODO: pull from texture (or some other source)
+ const vec3 material_color = vec3(1.0);
+
+ vec3 normal = normalize(view_normal);
+ float cos_theta = dot(normal, global_light.direction);
+ float cos_alpha = dot(-normalize(view_position), reflect(-global_light.direction, normal));
+
+ vec3 ambient = global_light.ambient * material_color;
+ vec3 diffuse = global_light.diffuse * material_color * max(0.0, cos_theta);
+ vec3 specular = global_light.specular * pow(max(0.0, cos_alpha), 5);
+
+ gl_FragColor = vec4(ambient + diffuse + specular, 1.0);
+}