diff options
-rw-r--r-- | source/blender/blenkernel/BKE_scene.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/context.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 19 |
3 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 581df648add..0dcb109240c 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -148,6 +148,7 @@ int BKE_scene_orientation_slot_get_index(const struct TransformOrientationSlot * /* ** Scene evaluation ** */ void BKE_scene_graph_update_tagged(struct Depsgraph *depsgraph, struct Main *bmain); +void BKE_scene_graph_evaluated_ensure(struct Depsgraph *depsgraph, struct Main *bmain); void BKE_scene_graph_update_for_newframe(struct Depsgraph *depsgraph, struct Main *bmain); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 28b0ae23ffe..4ae87713aa5 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -1365,7 +1365,7 @@ Depsgraph *CTX_data_evaluated_depsgraph(const bContext *C) { Depsgraph *depsgraph = CTX_data_depsgraph(C); Main *bmain = CTX_data_main(C); - BKE_scene_graph_update_tagged(depsgraph, bmain); + BKE_scene_graph_evaluated_ensure(depsgraph, bmain); return depsgraph; } diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 971e878ccbc..d1136b05e91 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1509,9 +1509,16 @@ static void prepare_mesh_for_viewport_render(Main *bmain, const ViewLayer *view_ /* TODO(sergey): This actually should become view_layer_graph or so. * Same applies to update_for_newframe. + * + * If only_if_tagged is truth then the function will do nothing if the dependency graph is up + * to date already. */ -void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain) +static void scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain, bool only_if_tagged) { + if (only_if_tagged && DEG_is_fully_evaluated(depsgraph)) { + return; + } + Scene *scene = DEG_get_input_scene(depsgraph); ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph); @@ -1548,6 +1555,16 @@ void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain) DEG_ids_clear_recalc(bmain, depsgraph); } +void BKE_scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain) +{ + scene_graph_update_tagged(depsgraph, bmain, false); +} + +void BKE_scene_graph_evaluated_ensure(Depsgraph *depsgraph, Main *bmain) +{ + scene_graph_update_tagged(depsgraph, bmain, true); +} + /* applies changes right away, does all sets too */ void BKE_scene_graph_update_for_newframe(Depsgraph *depsgraph, Main *bmain) { |