@@ -196,8 +196,12 @@ void main()
196196 float t_end = distance (start, end);
197197 vec3 dir = normalize (end - start);
198198
199- float start_pixel_dist = abs (dot (dir_x, eep_x.entry - eep.entry));
200- float end_pixel_dist = abs (dot (dir_x, eep_x.exit - eep.exit));
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));
201205
202206
203207 float lod_coarseness = consts.lod_coarseness;
@@ -207,16 +211,16 @@ void main()
207211 uint64_t prev_sample_brick_pos = 0xffffffffffffffffL;
208212 while (t <= t_end) {
209213 float alpha = t/ t_end;
210- float pixel_dist = start_pixel_dist * (1.0 - alpha) + end_pixel_dist * alpha;
214+ float pixel_dist_x = start_pixel_dist_x * (1.0 - alpha) + end_pixel_dist_x * alpha;
215+ float pixel_dist_y = start_pixel_dist_y * (1.0 - alpha) + end_pixel_dist_y * alpha;
211216
212217 while (level_num < NUM_LEVELS - 1 ) {
213218 uint next = level_num+ 1 ;
214219 vec3 next_spacing = to_glsl_vec3(vol.levels[next].spacing);
215220 float left_spacing_dist = length (abs (dir_x) * next_spacing);
216221 float top_spacing_dist = length (abs (dir_y) * next_spacing);
217- float spacing_dist = min (left_spacing_dist, top_spacing_dist);
218222
219- if (spacing_dist >= pixel_dist * lod_coarseness) {
223+ if (left_spacing_dist >= pixel_dist_x * lod_coarseness || top_spacing_dist >= pixel_dist_y * lod_coarseness) {
220224 break ;
221225 }
222226 level_num = next;
0 commit comments