+// Pasted from common_world.glsl
+vec3 water_compute_lighting( vec3 diffuse, vec3 normal, vec3 co )
+{
+ float light_mask = compute_board_shadow();
+
+ if( g_light_preview == 1 )
+ diffuse = vec3(0.75);
+
+ // Lighting
+ vec3 halfview = uCamera - co;
+ float fdist = length(halfview);
+ halfview /= fdist;
+
+ float world_shadow = newlight_compute_sun_shadow(
+ co, g_sun_dir.xyz * (1.0/(max(g_sun_dir.y,0.0)+0.2)) );
+
+ vec3 total_light = clearskies_lighting(
+ normal, min( light_mask, world_shadow ), halfview );
+
+ vec3 cube_coord = (co - g_cube_min.xyz) * g_cube_inv_range.xyz;
+ cube_coord = floor( cube_coord );
+
+ if( g_debug_indices == 1 )
+ {
+ return rand33(cube_coord);
+ }
+
+ if( g_debug_complexity == 1 )
+ {
+ ivec3 coord = ivec3( cube_coord );
+ uvec4 index_sample = texelFetch( uLightsIndex, coord, 0 );
+
+ uint light_count = (index_sample.x & 0x3u) + (index_sample.y & 0x3u);
+ return vec3( float(light_count)*(1.0/6.0), 0.0, 0.5 );
+ }
+
+ // FIXME: this coord should absolutely must be clamped!
+
+ ivec3 coord = ivec3( cube_coord );
+ uvec4 index_sample = texelFetch( uLightsIndex, coord, 0 );
+
+ total_light +=
+ scene_calculate_packed_light_patch( index_sample.x,
+ halfview, co, normal )
+ * light_mask;
+ total_light +=
+ scene_calculate_packed_light_patch( index_sample.y,
+ halfview, co, normal )
+ * light_mask;
+
+ return diffuse * total_light;
+}
+