[Bf-blender-cvs] [80d6565b930] temp-geometry-nodes-evaluator-refactor: fix missing lazy function update with animation

Jacques Lucke noreply at git.blender.org
Thu Sep 1 19:58:58 CEST 2022


Commit: 80d6565b930455622f56ace024a6629aa23a2802
Author: Jacques Lucke
Date:   Thu Sep 1 19:58:49 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB80d6565b930455622f56ace024a6629aa23a2802

fix missing lazy function update with animation

===================================================================

M	source/blender/blenkernel/BKE_node_runtime.hh
M	source/blender/blenkernel/intern/node_runtime.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh
index 3372f691bba..98c39d83e33 100644
--- a/source/blender/blenkernel/BKE_node_runtime.hh
+++ b/source/blender/blenkernel/BKE_node_runtime.hh
@@ -153,6 +153,8 @@ class bNodeRuntime : NonCopyable, NonMovable {
 
 namespace node_tree_runtime {
 
+void handle_node_tree_output_changed(bNodeTree &tree_cow);
+
 class AllowUsingOutdatedInfo : NonCopyable, NonMovable {
  private:
   const bNodeTree &tree_;
diff --git a/source/blender/blenkernel/intern/node_runtime.cc b/source/blender/blenkernel/intern/node_runtime.cc
index 0c78c0f09d1..9938091d267 100644
--- a/source/blender/blenkernel/intern/node_runtime.cc
+++ b/source/blender/blenkernel/intern/node_runtime.cc
@@ -10,8 +10,22 @@
 #include "BLI_task.hh"
 #include "BLI_timeit.hh"
 
+#include "NOD_geometry_nodes_to_lazy_function_graph.hh"
+
 namespace blender::bke::node_tree_runtime {
 
+void handle_node_tree_output_changed(bNodeTree &tree_cow)
+{
+  if (tree_cow.type == NTREE_GEOMETRY) {
+    /* Rebuild geometry nodes lazy function graph. */
+    {
+      std::lock_guard lock{tree_cow.runtime->geometry_nodes_lazy_function_graph_info_mutex};
+      tree_cow.runtime->geometry_nodes_lazy_function_graph_info.reset();
+    }
+    blender::nodes::ensure_geometry_nodes_lazy_function_graph(tree_cow);
+  }
+}
+
 static void double_checked_lock(std::mutex &mutex, bool &data_is_dirty, FunctionRef<void()> fn)
 {
   if (!data_is_dirty) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index d25adc279d7..dee8dfebc1b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -1737,7 +1737,14 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
   /* Animation, */
   build_animdata(&ntree->id);
   /* Output update. */
-  add_operation_node(&ntree->id, NodeType::NTREE_OUTPUT, OperationCode::NTREE_OUTPUT);
+  ID *id_cow = get_cow_id(&ntree->id);
+  add_operation_node(&ntree->id,
+                     NodeType::NTREE_OUTPUT,
+                     OperationCode::NTREE_OUTPUT,
+                     [id_cow](::Depsgraph * /*depsgraph*/) {
+                       bNodeTree *ntree_cow = reinterpret_cast<bNodeTree *>(id_cow);
+                       bke::node_tree_runtime::handle_node_tree_output_changed(*ntree_cow);
+                     });
   /* nodetree's nodes... */
   LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
     build_idproperties(bnode->prop);



More information about the Bf-blender-cvs mailing list