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