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 153ef11f3a111c3b8f1221ea16556112f7771389
parent 1a2901628e769475ad079776a5812c2fb205277a
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 30 May 2017 11:47:09 +0200

Fix a synchronisation issue in the scene_view creation

When an instance was updated, its associated back-end scene was
committed to Embree but the back-end scene in which it was contained was
not committed.

Diffstat:
Msrc/s3d_scene_view.c | 7+++++--
Msrc/s3d_scene_view_c.h | 1+
2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/s3d_scene_view.c b/src/s3d_scene_view.c @@ -365,7 +365,9 @@ scene_view_setup_embree(struct s3d_scene_view* scnview) /* Define whether or not the embree scene is outdated */ if(geom->embree_outdated_mask) rtc_outdated = 1; - + if(geom->type == GEOM_INSTANCE && geom->data.instance->scnview->rtc_commit) + rtc_outdated = 1; + /* Register the embree geometry */ res = embree_geometry_register(scnview, geom); if(res != RES_OK) goto error; @@ -390,6 +392,7 @@ scene_view_setup_embree(struct s3d_scene_view* scnview) /* Commit the embree changes */ if(rtc_outdated) { rtcCommit(scnview->rtc_scn); + scnview->rtc_commit = 1; /* Notify that the scene view was committed */ scnview->rtc_scn_update = 0; } @@ -791,7 +794,6 @@ scene_view_compute_volume return volume; } - static res_T scene_view_sync (struct s3d_scene_view* scnview, @@ -945,6 +947,7 @@ scene_view_release(ref_T* ref) f3_splat(scnview->lower, FLT_MAX); f3_splat(scnview->upper,-FLT_MAX); scnview->mask = 0; + scnview->rtc_commit = 0; /* Do not physically release the memory space of the scnview. Add it to the * available scnviews pool of the scene */ diff --git a/src/s3d_scene_view_c.h b/src/s3d_scene_view_c.h @@ -106,6 +106,7 @@ struct s3d_scene_view { int mask; /* Combination of enum s3d_scene_view_flag */ int rtc_scn_update; /* Define if Embree geometries were deleted/added */ + int rtc_commit; /* Define whether or not the Embree scene was committed */ RTCScene rtc_scn; /* Embree scene */ ref_T ref;