[Bf-blender-cvs] [7de6eb1b499] functions: define multi function to node mapping

Jacques Lucke noreply at git.blender.org
Thu Nov 21 15:19:52 CET 2019


Commit: 7de6eb1b4996689e277324995b8885ee309c8b51
Author: Jacques Lucke
Date:   Thu Nov 21 14:08:54 2019 +0100
Branches: functions
https://developer.blender.org/rB7de6eb1b4996689e277324995b8885ee309c8b51

define multi function to node mapping

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

M	source/blender/functions/FN_multi_function_network.h
M	source/blender/functions/intern/multi_function_network.cc
M	source/blender/functions/intern/vtree_multi_function_network/builder.cc
M	source/blender/functions/intern/vtree_multi_function_network/builder.h
M	source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
M	source/blender/functions/intern/vtree_multi_function_network/mappings_sockets.cc

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

diff --git a/source/blender/functions/FN_multi_function_network.h b/source/blender/functions/FN_multi_function_network.h
index bf6fd3edb43..0e64c5757e4 100644
--- a/source/blender/functions/FN_multi_function_network.h
+++ b/source/blender/functions/FN_multi_function_network.h
@@ -135,9 +135,7 @@ class MFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
   std::string to_dot();
   void to_dot__clipboard();
 
-  MFBuilderFunctionNode &add_function(const MultiFunction &function,
-                                      ArrayRef<uint> input_param_indices,
-                                      ArrayRef<uint> output_param_indices);
+  MFBuilderFunctionNode &add_function(const MultiFunction &function);
   MFBuilderDummyNode &add_dummy(ArrayRef<MFDataType> input_types,
                                 ArrayRef<MFDataType> output_types);
   void add_link(MFBuilderOutputSocket &from, MFBuilderInputSocket &to);
diff --git a/source/blender/functions/intern/multi_function_network.cc b/source/blender/functions/intern/multi_function_network.cc
index ff14446f60c..0f518201f13 100644
--- a/source/blender/functions/intern/multi_function_network.cc
+++ b/source/blender/functions/intern/multi_function_network.cc
@@ -33,18 +33,27 @@ MFNetworkBuilder::~MFNetworkBuilder()
   }
 }
 
-MFBuilderFunctionNode &MFNetworkBuilder::add_function(const MultiFunction &function,
-                                                      ArrayRef<uint> input_param_indices,
-                                                      ArrayRef<uint> output_param_indices)
+MFBuilderFunctionNode &MFNetworkBuilder::add_function(const MultiFunction &function)
 {
-#ifdef DEBUG
-  BLI_assert(!input_param_indices.has_duplicates__linear_search());
-  BLI_assert(!output_param_indices.has_duplicates__linear_search());
+  Vector<uint> input_param_indices;
+  Vector<uint> output_param_indices;
   for (uint param_index : function.param_indices()) {
-    BLI_assert(input_param_indices.contains(param_index) ||
-               output_param_indices.contains(param_index));
+    switch (function.param_type(param_index).interface_type()) {
+      case MFParamType::InterfaceType::Input: {
+        input_param_indices.append(param_index);
+        break;
+      }
+      case MFParamType::InterfaceType::Output: {
+        output_param_indices.append(param_index);
+        break;
+      }
+      case MFParamType::InterfaceType::Mutable: {
+        input_param_indices.append(param_index);
+        output_param_indices.append(param_index);
+        break;
+      }
+    }
   }
-#endif
 
   auto &node = *m_allocator.construct<MFBuilderFunctionNode>().release();
 
diff --git a/source/blender/functions/intern/vtree_multi_function_network/builder.cc b/source/blender/functions/intern/vtree_multi_function_network/builder.cc
index b7b9348bd36..2a0a46a40c4 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/builder.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/builder.cc
@@ -16,20 +16,15 @@ VTreeMFNetworkBuilder::VTreeMFNetworkBuilder(
 {
 }
 
-MFBuilderFunctionNode &VTreeMFNetworkBuilder::add_function(const MultiFunction &function,
-                                                           ArrayRef<uint> input_param_indices,
-                                                           ArrayRef<uint> output_param_indices)
+MFBuilderFunctionNode &VTreeMFNetworkBuilder::add_function(const MultiFunction &function)
 {
-  return m_builder->add_function(function, input_param_indices, output_param_indices);
+  return m_builder->add_function(function);
 }
 
 MFBuilderFunctionNode &VTreeMFNetworkBuilder::add_function(const MultiFunction &function,
-                                                           ArrayRef<uint> input_param_indices,
-                                                           ArrayRef<uint> output_param_indices,
                                                            const VNode &vnode)
 {
-  MFBuilderFunctionNode &node = m_builder->add_function(
-      function, input_param_indices, output_param_indices);
+  MFBuilderFunctionNode &node = m_builder->add_function(function);
   this->map_data_sockets(vnode, node);
   return node;
 }
diff --git a/source/blender/functions/intern/vtree_multi_function_network/builder.h b/source/blender/functions/intern/vtree_multi_function_network/builder.h
index ce589b2812c..29f3ba2459e 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/builder.h
+++ b/source/blender/functions/intern/vtree_multi_function_network/builder.h
@@ -81,14 +81,9 @@ class VTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
     return m_resources;
   }
 
-  MFBuilderFunctionNode &add_function(const MultiFunction &function,
-                                      ArrayRef<uint> input_param_indices,
-                                      ArrayRef<uint> output_param_indices);
+  MFBuilderFunctionNode &add_function(const MultiFunction &function);
 
-  MFBuilderFunctionNode &add_function(const MultiFunction &function,
-                                      ArrayRef<uint> input_param_indices,
-                                      ArrayRef<uint> output_param_indices,
-                                      const VNode &vnode);
+  MFBuilderFunctionNode &add_function(const MultiFunction &function, const VNode &vnode);
 
   MFBuilderDummyNode &add_dummy(const VNode &vnode);
 
@@ -276,7 +271,7 @@ class VSocketMFNetworkBuilder {
 
   void set_generator_fn(const MultiFunction &fn)
   {
-    MFBuilderFunctionNode &node = m_network_builder.add_function(fn, {}, {0});
+    MFBuilderFunctionNode &node = m_network_builder.add_function(fn);
     this->set_socket(node.output(0));
   }
 
diff --git a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
index ef069ad3c8f..52367476dc1 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
@@ -42,7 +42,7 @@ static void INSERT_combine_color(VTreeMFNetworkBuilder &builder, const VNode &vn
       base_fn,
       vnode.rna(),
       {"use_list__red", "use_list__green", "use_list__blue", "use_list__alpha"});
-  builder.add_function(fn, {0, 1, 2, 3}, {4}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static void INSERT_separate_color(VTreeMFNetworkBuilder &builder, const VNode &vnode)
@@ -50,7 +50,7 @@ static void INSERT_separate_color(VTreeMFNetworkBuilder &builder, const VNode &v
   const MultiFunction &base_fn = builder.construct_fn<FN::MF_SeparateColor>();
   const MultiFunction &fn = get_vectorized_function(
       builder, base_fn, vnode.rna(), {"use_list__color"});
-  builder.add_function(fn, {0}, {1, 2, 3, 4}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static void INSERT_combine_vector(VTreeMFNetworkBuilder &builder, const VNode &vnode)
@@ -58,7 +58,7 @@ static void INSERT_combine_vector(VTreeMFNetworkBuilder &builder, const VNode &v
   const MultiFunction &base_fn = builder.construct_fn<FN::MF_CombineVector>();
   const MultiFunction &fn = get_vectorized_function(
       builder, base_fn, vnode.rna(), {"use_list__x", "use_list__y", "use_list__z"});
-  builder.add_function(fn, {0, 1, 2}, {3}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static void INSERT_separate_vector(VTreeMFNetworkBuilder &builder, const VNode &vnode)
@@ -66,21 +66,21 @@ static void INSERT_separate_vector(VTreeMFNetworkBuilder &builder, const VNode &
   const MultiFunction &base_fn = builder.construct_fn<FN::MF_SeparateVector>();
   const MultiFunction &fn = get_vectorized_function(
       builder, base_fn, vnode.rna(), {"use_list__vector"});
-  builder.add_function(fn, {0}, {1, 2, 3}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static void INSERT_list_length(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const CPPType &type = builder.cpp_type_from_property(vnode, "active_type");
   const MultiFunction &fn = builder.construct_fn<FN::MF_ListLength>(type);
-  builder.add_function(fn, {0}, {1}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static void INSERT_get_list_element(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const CPPType &type = builder.cpp_type_from_property(vnode, "active_type");
   const MultiFunction &fn = builder.construct_fn<FN::MF_GetListElement>(type);
-  builder.add_function(fn, {0, 1, 2}, {3}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static Vector<bool> get_list_base_variadic_states(const VNode &vnode, StringRefNull prop_name)
@@ -112,14 +112,10 @@ static MFBuilderOutputSocket &build_pack_list_node(VTreeMFNetworkBuilder &builde
 {
   Vector<bool> list_states = get_list_base_variadic_states(vnode, prop_name);
 
-  uint input_amount = list_states.size();
-  uint output_param_index = (input_amount > 0 && list_states[0]) ? 0 : input_amount;
-
   const MultiFunction &fn = builder.construct_fn<FN::MF_PackList>(base_type, list_states);
-  MFBuilderFunctionNode &node = builder.add_function(
-      fn, IndexRange(input_amount).as_array_ref(), {output_param_index});
+  MFBuilderFunctionNode &node = builder.add_function(fn);
 
-  for (uint i = 0; i < input_amount; i++) {
+  for (uint i = 0; i < list_states.size(); i++) {
     builder.map_sockets(vnode.input(start_index + i), *node.inputs()[i]);
   }
 
@@ -137,13 +133,13 @@ static void INSERT_pack_list(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 static void INSERT_object_location(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const MultiFunction &fn = builder.construct_fn<FN::MF_ObjectWorldLocation>();
-  builder.add_function(fn, {0}, {1}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static void INSERT_object_mesh_info(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const MultiFunction &fn = builder.construct_fn<FN::MF_ObjectVertexPositions>();
-  builder.add_function(fn, {0}, {1}, vnode);
+  builder.add_function(fn, vnode);
 }
 
 static const MultiFunction &get_switch_function(VTreeMFNetworkBuilder &builder, const VNode &vnode)
@@ -164,31 +160,31 @@ static const MultiFunction &get_switch_function(VTreeMFNetworkBuilder &builder,
 static void INSERT_switch(V

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list