star-3d

Surface structuring for efficient 3D geometric queries
git clone git://git.meso-star.fr/star-3d.git
Log | Files | Refs | README | LICENSE

commit 0fc61bec854e3382e6dcde385c344a814d939dc3
parent eac41d1efd278429a4957f163d1a36bafda19911
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 10 Jan 2019 14:37:38 +0100

Do not register invalid spheres in a scene view

Diffstat:
Msrc/s3d_scene_view.c | 11++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/s3d_scene_view.c b/src/s3d_scene_view.c @@ -565,15 +565,22 @@ scene_view_register_sphere struct geometry** pgeom = NULL; struct geometry* geom = NULL; unsigned shape_id; + int is_valid; res_T res = RES_OK; ASSERT(scnview && shape && shape->type == GEOM_SPHERE); + is_valid = !sphere_is_degenerated(shape->data.sphere); + /* Retrieve the cached geometry */ S3D(shape_get_id(shape, &shape_id)); pgeom = htable_geom_find(&scnview->cached_geoms, &shape_id); if(pgeom) { geom = *pgeom; - } else { + if(!is_valid) { + scene_view_destroy_geometry(scnview, geom); + htable_geom_erase(&scnview->cached_geoms, &shape_id); + } + } else if(is_valid) { res = geometry_create(scnview->scn->dev, &geom); if(res != RES_OK) goto error; res = sphere_create(scnview->scn->dev, &geom->data.sphere); @@ -585,6 +592,8 @@ scene_view_register_sphere geom->embree_outdated_mask |= EMBREE_USER_GEOMETRY; } + if(!is_valid) goto exit; + /* Setup the sphere radius */ if(geom->data.sphere->radius != shape->data.sphere->radius) { geom->data.sphere->radius = shape->data.sphere->radius;