commit 42b55700d7388db5914b587721343184eecc4cb9 parent 289c9b650074e4e462d06626f4dc8f1dd5b5355d Author: Christophe Coustet <christophe.coustet@meso-star.com> Date: Thu, 7 Nov 2019 18:24:48 +0100 Fix an infinite loop related to a rare numerical accuracy problem. Diffstat:
| M | src/senc2d_scene_analyze.c | | | 10 | ++-------- |
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/src/senc2d_scene_analyze.c b/src/senc2d_scene_analyze.c @@ -116,20 +116,14 @@ self_hit_filter const struct darray_segment_comp* segments_comp = filter_data; const component_id_t* origin_component = ray_data; const struct segment_comp* hit_seg_comp; - enum senc2d_side hit_side; - component_id_t hit_component; (void)ray_org; (void)ray_dir; ASSERT(hit && segments_comp && origin_component); ASSERT(hit->prim.prim_id < darray_segment_comp_size_get(segments_comp)); hit_seg_comp = darray_segment_comp_cdata_get(segments_comp) + hit->prim.prim_id; - hit_side = (hit->normal[1] > 0) ? SENC2D_FRONT : SENC2D_BACK; - hit_component = hit_seg_comp->component[hit_side]; - - /* If self hit, distance should be small */ - ASSERT(hit_component != *origin_component || hit->distance < 1e-6); - return (hit_component == *origin_component); + return (hit_seg_comp->component[SENC2D_FRONT] == *origin_component + || hit_seg_comp->component[SENC2D_BACK] == *origin_component); } static void