Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_scene.h1
-rw-r--r--source/blender/blenkernel/intern/context.c2
-rw-r--r--source/blender/blenkernel/intern/scene.c19
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)
{