[Bf-blender-cvs] [9a02226aa25] functions: support for geometry dependencies of functions

Jacques Lucke noreply at git.blender.org
Tue Jul 16 18:20:20 CEST 2019


Commit: 9a02226aa25d5453526ec36b86f9cd74dc1e1886
Author: Jacques Lucke
Date:   Tue Jul 16 15:35:50 2019 +0200
Branches: functions
https://developer.blender.org/rB9a02226aa25d5453526ec36b86f9cd74dc1e1886

support for geometry dependencies of functions

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

M	source/blender/functions/backends/dependencies/dependencies-c.cpp
M	source/blender/functions/backends/dependencies/dependencies.hpp
M	source/blender/functions/backends/dependencies/fgraph_dependencies.cpp

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

diff --git a/source/blender/functions/backends/dependencies/dependencies-c.cpp b/source/blender/functions/backends/dependencies/dependencies-c.cpp
index 58f7bf8a6ee..3301a778d49 100644
--- a/source/blender/functions/backends/dependencies/dependencies-c.cpp
+++ b/source/blender/functions/backends/dependencies/dependencies-c.cpp
@@ -4,11 +4,14 @@
 
 using namespace FN;
 
-static void update_depsgraph(DepsNodeHandle *deps_node, ArrayRef<Object *> transform_dependencies)
+static void update_depsgraph(DepsNodeHandle *deps_node, DependencyComponents &dependencies)
 {
-  for (struct Object *ob : transform_dependencies) {
+  for (struct Object *ob : dependencies.transform_dependencies) {
     DEG_add_object_relation(deps_node, ob, DEG_OB_COMP_TRANSFORM, __func__);
   }
+  for (struct Object *ob : dependencies.geometry_dependencies) {
+    DEG_add_object_relation(deps_node, ob, DEG_OB_COMP_GEOMETRY, __func__);
+  }
 }
 
 void FN_function_update_dependencies(FnFunction fn_c, struct DepsNodeHandle *deps_node)
@@ -18,10 +21,10 @@ void FN_function_update_dependencies(FnFunction fn_c, struct DepsNodeHandle *dep
   if (body) {
     SmallMultiMap<uint, ID *> input_ids;
     SmallMultiMap<uint, ID *> output_ids;
-    SmallSetVector<Object *> transform_dependencies;
+    DependencyComponents components;
 
-    FunctionDepsBuilder builder(input_ids, output_ids, transform_dependencies);
+    FunctionDepsBuilder builder(input_ids, output_ids, components);
     body->build_deps(builder);
-    update_depsgraph(deps_node, transform_dependencies);
+    update_depsgraph(deps_node, components);
   }
 }
diff --git a/source/blender/functions/backends/dependencies/dependencies.hpp b/source/blender/functions/backends/dependencies/dependencies.hpp
index 83c2fec4631..963c9c76b27 100644
--- a/source/blender/functions/backends/dependencies/dependencies.hpp
+++ b/source/blender/functions/backends/dependencies/dependencies.hpp
@@ -7,19 +7,24 @@ struct Object;
 
 namespace FN {
 
+struct DependencyComponents {
+  SmallSetVector<Object *> transform_dependencies;
+  SmallSetVector<Object *> geometry_dependencies;
+};
+
 class FunctionDepsBuilder {
  private:
   const SmallMultiMap<uint, ID *> &m_input_ids;
   SmallMultiMap<uint, ID *> &m_output_ids;
-  SmallSetVector<Object *> &m_transform_dependencies;
+  DependencyComponents &m_dependency_components;
 
  public:
   FunctionDepsBuilder(const SmallMultiMap<uint, ID *> &input_ids,
                       SmallMultiMap<uint, ID *> &output_ids,
-                      SmallSetVector<Object *> &transform_dependencies)
+                      DependencyComponents &dependency_components)
       : m_input_ids(input_ids),
         m_output_ids(output_ids),
-        m_transform_dependencies(transform_dependencies)
+        m_dependency_components(dependency_components)
   {
   }
 
@@ -50,7 +55,17 @@ class FunctionDepsBuilder {
 
   void add_transform_dependency(ArrayRef<Object *> objects)
   {
-    m_transform_dependencies.add_multiple(objects);
+    m_dependency_components.transform_dependencies.add_multiple(objects);
+  }
+
+  void add_geometry_dependency(ArrayRef<Object *> objects)
+  {
+    m_dependency_components.geometry_dependencies.add_multiple(objects);
+  }
+
+  DependencyComponents &dependency_components()
+  {
+    return m_dependency_components;
   }
 };
 
diff --git a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
index d8a867454d1..c59445a337d 100644
--- a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
+++ b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
@@ -15,26 +15,21 @@ class FGraphDependencies : public DepsBody {
 
   void build_deps(FunctionDepsBuilder &builder) const override
   {
-    SmallSetVector<Object *> transform_dependencies;
     for (uint i = 0; i < m_fgraph.outputs().size(); i++) {
       DFGraphSocket socket = m_fgraph.outputs()[i];
-      SmallVector<ID *> outputs = this->find_deps_and_outputs(
-          socket, transform_dependencies, builder);
+      SmallVector<ID *> outputs = this->find_deps_and_outputs(socket, builder);
       builder.add_output_ids(i, outputs);
     }
-    builder.add_transform_dependency(transform_dependencies);
   }
 
   SmallVector<ID *> find_deps_and_outputs(DFGraphSocket socket,
-                                          SmallSetVector<Object *> &transform_dependencies,
                                           FunctionDepsBuilder &parent_builder) const
   {
     if (m_fgraph.inputs().contains(socket)) {
       return parent_builder.get_input_ids(m_fgraph.inputs().index(socket));
     }
     else if (socket.is_input()) {
-      return this->find_deps_and_outputs(
-          m_graph->origin_of_input(socket), transform_dependencies, parent_builder);
+      return this->find_deps_and_outputs(m_graph->origin_of_input(socket), parent_builder);
     }
     else {
       uint node_id = m_graph->node_id_of_output(socket);
@@ -42,7 +37,7 @@ class FGraphDependencies : public DepsBody {
       DepsBody *body = fn->body<DepsBody>();
       if (body == nullptr) {
         for (auto input_socket : m_graph->inputs_of_node(node_id)) {
-          this->find_deps_and_outputs(input_socket, transform_dependencies, parent_builder);
+          this->find_deps_and_outputs(input_socket, parent_builder);
         }
         return {};
       }
@@ -53,12 +48,11 @@ class FGraphDependencies : public DepsBody {
           input_ids.add_multiple_new(
               i,
               this->find_deps_and_outputs(m_graph->socket_of_node_input(node_id, i),
-                                          transform_dependencies,
                                           parent_builder));
         }
 
         SmallMultiMap<uint, ID *> output_ids;
-        FunctionDepsBuilder builder(input_ids, output_ids, transform_dependencies);
+        FunctionDepsBuilder builder(input_ids, output_ids, parent_builder.dependency_components());
         body->build_deps(builder);
         return output_ids.lookup_default(m_graph->index_of_output(socket));
       }



More information about the Bf-blender-cvs mailing list