[Bf-blender-cvs] [1f504e3bd97] functions: separate dependencies from tuple call body

Jacques Lucke noreply at git.blender.org
Fri Mar 1 17:19:56 CET 2019


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;
 	}



More information about the Bf-blender-cvs mailing list