[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