Commit: 1f504e3bd979a8de1c470e2b898efd9ffcf95120
Author: Jacques Lucke
Date:   Fri Mar 1 16:27:45 2019 +0100
Branches: functions
https://developer.blender.org/rB1f504e3bd979a8de1c470e2b898efd9ffcf95120

separate dependencies from tuple call body

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

M       source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M       source/blender/functions/CMakeLists.txt
M       source/blender/functions/FN_all.hpp
M       source/blender/functions/FN_core.hpp
A       source/blender/functions/FN_dependencies.hpp
R080    source/blender/functions/core/dependencies.cpp  
source/blender/functions/backends/dependencies/dependencies.cpp
R071    source/blender/functions/core/dependencies.hpp  
source/blender/functions/backends/dependencies/dependencies.hpp
A       source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
A       source/blender/functions/backends/dependencies/fgraph_dependencies.hpp
M       source/blender/functions/backends/tuple_call/fgraph_to_tuple_call.cpp
M       source/blender/functions/backends/tuple_call/tuple_call.hpp
M       source/blender/functions/c_wrapper.cpp
M       
source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
M       source/blender/functions/functions/object_input.cpp

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index f42a8e21202..46c32821315 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1557,7 +1557,7 @@ void DepsgraphRelationBuilder::build_driver_variables(ID 
*id, FCurve *fcu)
                                auto fn = (BLI::RefCounted<FN::Function> 
*)get_driver_variable_function(dvar);
                                if (fn != NULL) {
                                        FN::Dependencies dependencies;
-                                       
fn->ptr()->body<FN::TupleCallBody>()->dependencies(dependencies);
+                                       
fn->ptr()->body<FN::DependenciesBody>()->dependencies(dependencies);
                                        dependencies.add_relations(
                                                (struct 
DepsgraphRelationBuilderRef *)this,
                                                (struct OperationKeyRef 
*)&driver_key);
diff --git a/source/blender/functions/CMakeLists.txt 
b/source/blender/functions/CMakeLists.txt
index 0b6a7c7e512..d3b2c28053e 100644
--- a/source/blender/functions/CMakeLists.txt
+++ b/source/blender/functions/CMakeLists.txt
@@ -24,8 +24,6 @@ set(SRC
        core/core.cpp
        core/data_flow_graph.hpp
        core/data_flow_graph.cpp
-       core/dependencies.hpp
-       core/dependencies.cpp
        core/dot_export.cpp
        core/type_inferencing.hpp
        core/type_inferencing.cpp
@@ -40,6 +38,11 @@ set(SRC
        backends/tuple_call/fgraph_to_tuple_call.cpp
        backends/tuple_call/tuple.hpp
 
+       backends/dependencies/dependencies.hpp
+       backends/dependencies/dependencies.cpp
+       backends/dependencies/fgraph_dependencies.hpp
+       backends/dependencies/fgraph_dependencies.cpp
+
        types/numeric.cpp
        types/numeric.hpp
 
diff --git a/source/blender/functions/FN_all.hpp 
b/source/blender/functions/FN_all.hpp
index 0cdfe59a52d..8c92032891e 100644
--- a/source/blender/functions/FN_all.hpp
+++ b/source/blender/functions/FN_all.hpp
@@ -4,4 +4,5 @@
 #include "FN_types.hpp"
 #include "FN_functions.hpp"
 #include "FN_tuple_call.hpp"
+#include "FN_dependencies.hpp"
 #include "FN_data_flow_nodes.hpp"
\ No newline at end of file
diff --git a/source/blender/functions/FN_core.hpp 
b/source/blender/functions/FN_core.hpp
index d455c5c6f9a..45a481584d0 100644
--- a/source/blender/functions/FN_core.hpp
+++ b/source/blender/functions/FN_core.hpp
@@ -2,6 +2,5 @@
 
 #include "core/core.hpp"
 #include "core/data_flow_graph.hpp"
-#include "core/dependencies.hpp"
 #include "core/type_relations.hpp"
 #include "core/type_inferencing.hpp"
\ No newline at end of file
diff --git a/source/blender/functions/FN_dependencies.hpp 
b/source/blender/functions/FN_dependencies.hpp
new file mode 100644
index 00000000000..f6c8b8f2928
--- /dev/null
+++ b/source/blender/functions/FN_dependencies.hpp
@@ -0,0 +1,4 @@
+#pragma once
+
+#include "backends/dependencies/dependencies.hpp"
+#include "backends/dependencies/fgraph_dependencies.hpp"
\ No newline at end of file
diff --git a/source/blender/functions/core/dependencies.cpp 
b/source/blender/functions/backends/dependencies/dependencies.cpp
similarity index 80%
rename from source/blender/functions/core/dependencies.cpp
rename to source/blender/functions/backends/dependencies/dependencies.cpp
index 698720b223f..582c4f6304c 100644
--- a/source/blender/functions/core/dependencies.cpp
+++ b/source/blender/functions/backends/dependencies/dependencies.cpp
@@ -5,6 +5,18 @@
 
 namespace FN {
 
+       const char *DependenciesBody::identifier_in_composition()
+       {
+               return "Dependencies";
+       }
+
+       void DependenciesBody::free_self(void *value)
+       {
+               DependenciesBody *v = (DependenciesBody *)value;
+               delete v;
+       }
+
+
        void Dependencies::add_object_transform_dependency(struct Object 
*object)
        {
                m_transform_dependencies.add(object);
diff --git a/source/blender/functions/core/dependencies.hpp 
b/source/blender/functions/backends/dependencies/dependencies.hpp
similarity index 71%
rename from source/blender/functions/core/dependencies.hpp
rename to source/blender/functions/backends/dependencies/dependencies.hpp
index 90d0b0259ec..98e15db5a75 100644
--- a/source/blender/functions/core/dependencies.hpp
+++ b/source/blender/functions/backends/dependencies/dependencies.hpp
@@ -24,4 +24,12 @@ namespace FN {
                        const struct OperationKeyRef *target);
        };
 
+       class DependenciesBody {
+       public:
+               static const char *identifier_in_composition();
+               static void free_self(void *value);
+
+               virtual void dependencies(Dependencies &deps) const = 0;
+       };
+
 } /* namespace FN */
\ No newline at end of file
diff --git 
a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp 
b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
new file mode 100644
index 00000000000..b94f28cd33d
--- /dev/null
+++ b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
@@ -0,0 +1,28 @@
+#include "fgraph_dependencies.hpp"
+
+namespace FN {
+
+       class FGraphDependencies : public DependenciesBody {
+       private:
+               SharedDataFlowGraph m_graph;
+
+       public:
+               FGraphDependencies(const FunctionGraph &function_graph)
+                       : m_graph(function_graph.graph()) {}
+
+               void dependencies(Dependencies &deps) const override
+               {
+                       for (const Node *node : m_graph->all_nodes()) {
+                               const DependenciesBody *body = 
node->function()->body<DependenciesBody>();
+                               if (body) body->dependencies(deps);
+                       }
+               }
+       };
+
+       DependenciesBody *fgraph_dependencies(
+               const FunctionGraph &function_graph)
+       {
+               return new FGraphDependencies(function_graph);
+       }
+
+} /* namespace FN */
\ No newline at end of file
diff --git 
a/source/blender/functions/backends/dependencies/fgraph_dependencies.hpp 
b/source/blender/functions/backends/dependencies/fgraph_dependencies.hpp
new file mode 100644
index 00000000000..7c2a0a8402b
--- /dev/null
+++ b/source/blender/functions/backends/dependencies/fgraph_dependencies.hpp
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "FN_core.hpp"
+#include "dependencies.hpp"
+
+namespace FN {
+
+       DependenciesBody *fgraph_dependencies(
+               const FunctionGraph &function_graph);
+
+} /* namespace FN */
\ No newline at end of file
diff --git 
a/source/blender/functions/backends/tuple_call/fgraph_to_tuple_call.cpp 
b/source/blender/functions/backends/tuple_call/fgraph_to_tuple_call.cpp
index 8217927a8b4..ca90ad62d86 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_to_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_to_tuple_call.cpp
@@ -14,14 +14,6 @@ namespace FN {
                          m_inputs(function_graph.inputs()),
                          m_outputs(function_graph.outputs()) {}
 
-               void dependencies(Dependencies &deps) const override
-               {
-                       for (const Node *node : m_graph->all_nodes()) {
-                               const TupleCallBody *body = 
node->function()->body<TupleCallBody>();
-                               if (body) body->dependencies(deps);
-                       }
-               }
-
                void call(const Tuple &fn_in, Tuple &fn_out) const override
                {
                        for (uint i = 0; i < m_outputs.size(); i++) {
diff --git a/source/blender/functions/backends/tuple_call/tuple_call.hpp 
b/source/blender/functions/backends/tuple_call/tuple_call.hpp
index a3e3c1cc62d..115fe42ca92 100644
--- a/source/blender/functions/backends/tuple_call/tuple_call.hpp
+++ b/source/blender/functions/backends/tuple_call/tuple_call.hpp
@@ -12,7 +12,6 @@ namespace FN {
                virtual ~TupleCallBody() {};
 
                virtual void call(const Tuple &fn_in, Tuple &fn_out) const = 0;
-               virtual void dependencies(Dependencies &UNUSED(deps)) const {}
                virtual void init_defaults(Tuple &fn_in) const;
        };
 
diff --git a/source/blender/functions/c_wrapper.cpp 
b/source/blender/functions/c_wrapper.cpp
index da8ab969603..ce934ce86ed 100644
--- a/source/blender/functions/c_wrapper.cpp
+++ b/source/blender/functions/c_wrapper.cpp
@@ -207,7 +207,10 @@ void FN_function_update_dependencies(
        struct DepsNodeHandle *deps_node)
 {
        RefCounted<Function> *fn_ref = unwrap(fn);
-       Dependencies dependencies;
-       fn_ref->ptr()->body<TupleCallBody>()->dependencies(dependencies);
-       dependencies.update_depsgraph(deps_node);
+       const DependenciesBody *body = fn_ref->ptr()->body<DependenciesBody>();
+       if (body) {
+               Dependencies dependencies;
+               body->dependencies(dependencies);
+               dependencies.update_depsgraph(deps_node);
+       }
 }
\ No newline at end of file
diff --git 
a/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp 
b/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
index 6ab53ebfd3b..883deccd6cf 100644
--- a/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
@@ -2,6 +2,7 @@
 #include "graph_generation.hpp"
 
 #include "FN_tuple_call.hpp"
+#include "FN_dependencies.hpp"
 #include "DNA_node_types.h"
 
 namespace FN { namespace DataFlowNodes {
@@ -17,6 +18,7 @@ namespace FN { namespace DataFlowNodes {
 
                auto fn = SharedFunction::New(btree->id.name, 
fgraph.signature());
                fn->add_body(fgraph_to_tuple_call(fgraph));
+               fn->add_body(fgraph_dependencies(fgraph));
                return fn;
        }
 
diff --git a/source/blender/functions/functions/object_input.cpp 
b/source/blender/functions/functions/object_input.cpp
index 709cc3f2ad1..6069dc8d652 100644
--- a/source/blender/functions/functions/object_input.cpp
+++ b/source/blender/functions/functions/object_input.cpp
@@ -1,6 +1,7 @@
 #include "object_input.hpp"
 #include "FN_types.hpp"
 #include "FN_tuple_call.hpp"
+#include "FN_dependencies.hpp"
 
 #include "BLI_lazy_init.hpp"
 #include "DNA_object_types.h"
@@ -27,6 +28,15 @@ namespace FN { namespace Functions {
                                fn_out.set<Vector>(0, Vector());
                        }
                }
+       };
+
+       class ObjectTransformsDependency : public DependenciesBody {
+       private:
+               Object *m_object;
+
+       public:
+               ObjectTransformsDependency(Object *object)
+                       : m_object(object) {}
 
                void dependencies(Dependencies &deps) const override
                {
@@ -40,6 +50,7 @@ namespace FN { namespace Functions {
                        OutputParameter("Location", get_fvec3_type()),
                }));
                fn->add_body(new ObjectTransforms(object));
+               fn->add_body(new ObjectTransformsDependency(object));
                return fn;
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to