diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-27 13:10:01 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-27 13:10:01 +0300 |
commit | 067fe2719a993419ba64db2f4028d68139d64617 (patch) | |
tree | dc825ab63893b10666273a84a4995c993809de9b /source/blender/blenkernel/intern/depsgraph.c | |
parent | 43dab7833ab06f5d2939023bee29e999b310310b (diff) |
Fix T45702: Editing smoke while viewport render and blender bug
Issue was caused by blender internal accessing data from DNA during rendering.
There's no simple solution to make stuff thread safe, so for now simply restart
rendering on frame update.
Diffstat (limited to 'source/blender/blenkernel/intern/depsgraph.c')
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 62491f1ff6e..1e286b345ca 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -1349,16 +1349,32 @@ void graph_print_adj_list(DagForest *dag) * to do their own updates based on changes... */ static void (*EditorsUpdateIDCb)(Main *bmain, ID *id) = NULL; static void (*EditorsUpdateSceneCb)(Main *bmain, Scene *scene, int updated) = NULL; +static void (*EditorsUpdateScenePreCb)(Main *bmain, Scene *scene, bool time) = NULL; -void DAG_editors_update_cb(void (*id_func)(Main *bmain, ID *id), void (*scene_func)(Main *bmain, Scene *scene, int updated)) +void DAG_editors_update_cb(void (*id_func)(Main *bmain, ID *id), + void (*scene_func)(Main *bmain, Scene *scene, int updated), + void (*scene_pre_func)(Main *bmain, Scene *scene, bool time)) { if (DEG_depsgraph_use_legacy()) { EditorsUpdateIDCb = id_func; EditorsUpdateSceneCb = scene_func; + EditorsUpdateScenePreCb = scene_pre_func; } else { /* New dependency graph. */ - DEG_editors_set_update_cb(id_func, scene_func); + DEG_editors_set_update_cb(id_func, scene_func, scene_pre_func); + } +} + +void DAG_editors_update_pre(Main *bmain, Scene *scene, bool time) +{ + if (DEG_depsgraph_use_legacy()) { + if (EditorsUpdateScenePreCb != NULL) { + EditorsUpdateScenePreCb(bmain, scene, time); + } + } + else { + DEG_editors_update_pre(bmain, scene, time); } } |