--- /dev/null
+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);
+}