@@ -175,6 +175,7 @@ void main()
175175 float diag = length (vec3 (to_glsl_uvec3(root_level.dimensions)) * to_glsl_vec3(root_level.spacing));
176176
177177 uvec2 eep_x_offset = uvec2 (1 ,0 );
178+ uvec2 eep_y_offset = uvec2 (0 ,1 );
178179
179180 EEPoint eep_x;
180181 if (! sample_ee(out_pos + eep_x_offset, eep_x, root_level)) {
@@ -183,25 +184,30 @@ void main()
183184 eep_x.exit = vec3 (1.0 );
184185 }
185186 }
187+ EEPoint eep_y;
188+ if (! sample_ee(out_pos + eep_y_offset, eep_y, root_level)) {
189+ if (! sample_ee(out_pos - eep_y_offset, eep_y, root_level)) {
190+ eep_y.entry = vec3 (0.0 );
191+ eep_y.exit = vec3 (1.0 );
192+ }
193+ }
186194 vec3 center = eep.entry;
187195 vec3 front = eep.exit - eep.entry;
188196
189197 vec3 rough_dir_x = eep_x.exit - eep.exit;
190- vec3 rough_dir_y = cross (rough_dir_x, front) ;
198+ vec3 rough_dir_y = eep_y.exit - eep.exit ;
191199 vec3 dir_x = normalize (cross (rough_dir_y, front));
192- vec3 dir_y = normalize (cross (dir_x , front));
200+ vec3 dir_y = normalize (cross (rough_dir_x , front));
193201
194202 vec3 start = eep.entry;
195203 vec3 end = eep.exit;
196204 float t_end = distance (start, end);
197205 vec3 dir = normalize (end - start);
198206
199- vec3 entry_diff = eep_x.entry - eep.entry;
200- vec3 exit_diff = eep_x.exit - eep.exit;
201- float start_pixel_dist_x = abs (dot (dir_x, entry_diff));
202- float end_pixel_dist_x = abs (dot (dir_x, exit_diff));
203- float start_pixel_dist_y = abs (dot (dir_y, entry_diff));
204- float end_pixel_dist_y = abs (dot (dir_y, exit_diff));
207+ float start_pixel_dist_x = abs (dot (dir_x, eep_x.entry - eep.entry));
208+ float end_pixel_dist_x = abs (dot (dir_x, eep_x.exit - eep.exit));
209+ float start_pixel_dist_y = abs (dot (dir_y, eep_y.exit - eep.exit));
210+ float end_pixel_dist_y = abs (dot (dir_y, eep_y.exit - eep.exit));
205211
206212
207213 float lod_coarseness = consts.lod_coarseness;
0 commit comments