diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 21 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_eval.cc | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 6392a5df1d2..7b5186a111d 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1474,7 +1474,26 @@ static void scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain, bool on break; } - run_callbacks = false; + /* TODO(sergey): Some functions here are changing global state, + * for example, clearing update tags from bmain. + */ + /* (Re-)build dependency graph if needed. */ + DEG_graph_relations_update(depsgraph, bmain, scene, view_layer); + /* Uncomment this to check if graph was properly tagged for update. */ + // DEG_debug_graph_relations_validate(depsgraph, bmain, scene); + /* Flush editing data if needed. */ + prepare_mesh_for_viewport_render(bmain, view_layer); + /* Flush recalc flags to dependencies. */ + DEG_graph_flush_update(bmain, depsgraph); + /* Update all objects: drivers, matrices, displists, etc. flags set + * by depgraph or manual, no layer check here, gets correct flushed. + */ + DEG_evaluate_on_refresh(bmain, depsgraph); + /* Update sound system. */ + BKE_scene_update_sound(depsgraph, bmain); + /* Notify python about depsgraph update. */ + if (run_callbacks) { + BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_DEPSGRAPH_UPDATE_POST); } } diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc index b2b7d2a9d00..1e7bbd73531 100644 --- a/source/blender/depsgraph/intern/depsgraph_eval.cc +++ b/source/blender/depsgraph/intern/depsgraph_eval.cc @@ -49,7 +49,7 @@ extern "C" { #include "intern/depsgraph.h" /* Evaluate all nodes tagged for updating. */ -void DEG_evaluate_on_refresh(Main *bmain, Depsgraph *graph) +void DEG_evaluate_on_refresh(Main * /*bmain*/, Depsgraph *graph) { DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph); deg_graph->ctime = BKE_scene_frame_get(deg_graph->scene); diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 2b0627251cd..c5553a105fb 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -210,6 +210,7 @@ static void compo_initjob(void *cjv) /* NOTE: Don't update animation to preserve unkeyed changes, this means can not use * evaluate_on_framechange. */ + DEG_graph_flush_update(bmain, cj->compositor_depsgraph); DEG_evaluate_on_refresh(bmain, cj->compositor_depsgraph); bNodeTree *ntree_eval = (bNodeTree *)DEG_get_evaluated_id(cj->compositor_depsgraph, |