[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