]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/lighting.glsl
Rearrange some things in the shader library
[libs/gl.git] / shaderlib / lighting.glsl
diff --git a/shaderlib/lighting.glsl b/shaderlib/lighting.glsl
new file mode 100644 (file)
index 0000000..762eb49
--- /dev/null
@@ -0,0 +1,33 @@
+struct LightSourceParameters
+{
+       vec4 position;
+       vec3 color;
+       int type;
+       vec3 attenuation;
+};
+
+const int max_lights = 6;
+layout(set=0) uniform Lighting
+{
+       LightSourceParameters light_sources[max_lights];
+       vec4 ambient_color;
+       vec4 fog_color;
+       //float fog_start_distance;
+       float fog_density;
+};
+
+#pragma MSP stage(fragment)
+struct IncomingLight
+{
+       vec3 direction;
+       vec3 color;
+};
+
+virtual IncomingLight get_incoming_light(int index, vec3 world_pos)
+{
+       vec4 light_pos = light_sources[index].position;
+       vec3 rel_pos = light_pos.xyz-world_pos*light_pos.w;
+       float d = length(rel_pos);
+       float attenuation = 1.0/dot(vec3(1.0, d, d*d), light_sources[index].attenuation);
+       return IncomingLight(rel_pos/d, light_sources[index].color*attenuation);
+}