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:
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;