[Bf-blender-cvs] [3ca095f1eb8] functions: simplify vsocket to multi function mapping
Jacques Lucke
noreply at git.blender.org
Thu Nov 21 15:19:50 CET 2019
Commit: 3ca095f1eb890533c6b550fb3aa0a742305dc802
Author: Jacques Lucke
Date: Thu Nov 21 13:44:56 2019 +0100
Branches: functions
https://developer.blender.org/rB3ca095f1eb890533c6b550fb3aa0a742305dc802
simplify vsocket to multi function mapping
===================================================================
M source/blender/functions/CMakeLists.txt
D source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
M source/blender/functions/intern/vtree_multi_function_network/builder.h
M source/blender/functions/intern/vtree_multi_function_network/generate.cc
M source/blender/functions/intern/vtree_multi_function_network/mappings.h
M source/blender/functions/intern/vtree_multi_function_network/mappings_sockets.cc
M source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
===================================================================
diff --git a/source/blender/functions/CMakeLists.txt b/source/blender/functions/CMakeLists.txt
index 2d2cacf1cc4..5d83c907b38 100644
--- a/source/blender/functions/CMakeLists.txt
+++ b/source/blender/functions/CMakeLists.txt
@@ -25,8 +25,6 @@ set(SRC
intern/multi_functions/lists.cc
intern/multi_functions/mixed.cc
intern/multi_functions/network.cc
- intern/vtree_multi_function/mappings.cc
- intern/vtree_multi_function/vnode_multi_function_wrapper_builder.cc
intern/vtree_multi_function_network/builder.cc
intern/vtree_multi_function_network/generate.cc
intern/vtree_multi_function_network/mappings_nodes.cc
@@ -65,12 +63,6 @@ set(SRC
intern/multi_functions/lists.h
intern/multi_functions/mixed.h
intern/multi_functions/network.h
- intern/vtree_multi_function/mappings.h
- intern/vtree_multi_function/vnode_multi_function_wrapper_builder.h
- intern/vtree_multi_function/vnode_multi_function_wrapper.h
- intern/vtree_multi_function/vsocket_multi_function_builder.h
- intern/vtree_multi_function/vsocket_multi_function_data_types.h
- intern/vtree_multi_function/vtree_multi_function.h
intern/vtree_multi_function_network/builder.h
intern/vtree_multi_function_network/mappings.h
intern/cpp_types.h
diff --git a/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h b/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
deleted file mode 100644
index 8cfe46147e2..00000000000
--- a/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#pragma once
-
-#include "FN_multi_function.h"
-
-#include "vnode_multi_function_wrapper.h"
-#include "mappings.h"
-
-namespace FN {
-
-class VTreeMultiFunction final : public MultiFunction {
- private:
- Vector<const VOutputSocket *> m_inputs;
- Vector<const VInputSocket *> m_outputs;
-
- public:
- VTreeMultiFunction(Vector<const VOutputSocket *> inputs, Vector<const VInputSocket *> outputs)
- : m_inputs(std::move(inputs)), m_outputs(std::move(outputs))
- {
- }
-
- void call(MFMask UNUSED(mask), MFParams UNUSED(params), MFContext UNUSED(context)) const override
- {
- }
-};
-
-} // namespace FN
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 260eb8e32d1..ce589b2812c 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/builder.h
+++ b/source/blender/functions/intern/vtree_multi_function_network/builder.h
@@ -1,6 +1,7 @@
#pragma once
#include "FN_vtree_multi_function_network.h"
+#include "FN_multi_functions.h"
#include "BLI_multi_map.h"
@@ -234,4 +235,55 @@ class VTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
std::unique_ptr<VTreeMFNetwork> build();
};
+class VSocketMFNetworkBuilder {
+ private:
+ VTreeMFNetworkBuilder &m_network_builder;
+ const VSocket &m_vsocket;
+ MFBuilderOutputSocket *m_socket_to_build = nullptr;
+
+ public:
+ VSocketMFNetworkBuilder(VTreeMFNetworkBuilder &network_builder, const VSocket &vsocket)
+ : m_network_builder(network_builder), m_vsocket(vsocket)
+ {
+ }
+
+ MFBuilderOutputSocket &built_socket()
+ {
+ BLI_assert(m_socket_to_build != nullptr);
+ return *m_socket_to_build;
+ }
+
+ const VSocket &vsocket() const
+ {
+ return m_vsocket;
+ }
+
+ PointerRNA *rna()
+ {
+ return m_vsocket.rna();
+ }
+
+ VTreeMFNetworkBuilder &network_builder()
+ {
+ return m_network_builder;
+ }
+
+ template<typename T> void set_constant_value(const T &value)
+ {
+ const MultiFunction &fn = m_network_builder.construct_fn<MF_ConstantValue<T>>(value);
+ this->set_generator_fn(fn);
+ }
+
+ void set_generator_fn(const MultiFunction &fn)
+ {
+ MFBuilderFunctionNode &node = m_network_builder.add_function(fn, {}, {0});
+ this->set_socket(node.output(0));
+ }
+
+ void set_socket(MFBuilderOutputSocket &socket)
+ {
+ m_socket_to_build = &socket;
+ }
+};
+
} // namespace FN
diff --git a/source/blender/functions/intern/vtree_multi_function_network/generate.cc b/source/blender/functions/intern/vtree_multi_function_network/generate.cc
index b92c01ca09a..9a8a34f5e21 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/generate.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/generate.cc
@@ -90,15 +90,17 @@ static bool insert_unlinked_inputs(VTreeMFNetworkBuilder &builder,
}
for (const VInputSocket *vsocket : unlinked_data_inputs) {
- const InsertUnlinkedInputFunction *inserter = mappings.input_inserters.lookup_ptr(
+ const InsertVSocketFunction *inserter = mappings.vsocket_inserters.lookup_ptr(
vsocket->idname());
if (inserter == nullptr) {
return false;
}
- MFBuilderOutputSocket &from_socket = (*inserter)(builder, *vsocket);
+
+ VSocketMFNetworkBuilder vsocket_builder{builder, *vsocket};
+ (*inserter)(vsocket_builder);
for (MFBuilderInputSocket *to_socket : builder.lookup_socket(*vsocket)) {
- builder.add_link(from_socket, *to_socket);
+ builder.add_link(vsocket_builder.built_socket(), *to_socket);
}
}
diff --git a/source/blender/functions/intern/vtree_multi_function_network/mappings.h b/source/blender/functions/intern/vtree_multi_function_network/mappings.h
index e883082602b..d4610448066 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/mappings.h
+++ b/source/blender/functions/intern/vtree_multi_function_network/mappings.h
@@ -14,11 +14,11 @@ using BLI::StringMap;
struct VTreeMultiFunctionMappings;
class VTreeMFNetworkBuilder;
+class VSocketMFNetworkBuilder;
using InsertVNodeFunction =
std::function<void(VTreeMFNetworkBuilder &builder, const VNode &vnode)>;
-using InsertUnlinkedInputFunction =
- std::function<MFBuilderOutputSocket &(VTreeMFNetworkBuilder &builder, const VSocket &vsocket)>;
+using InsertVSocketFunction = std::function<void(VSocketMFNetworkBuilder &builder)>;
using InsertImplicitConversionFunction = std::function<
std::pair<MFBuilderInputSocket *, MFBuilderOutputSocket *>(VTreeMFNetworkBuilder &builder)>;
@@ -28,7 +28,7 @@ struct VTreeMultiFunctionMappings {
StringMap<MFDataType> data_type_by_type_name;
Map<const CPPType *, std::string> type_name_from_cpp_type;
StringMap<InsertVNodeFunction> vnode_inserters;
- StringMap<InsertUnlinkedInputFunction> input_inserters;
+ StringMap<InsertVSocketFunction> vsocket_inserters;
Map<std::pair<std::string, std::string>, InsertImplicitConversionFunction> conversion_inserters;
};
diff --git a/source/blender/functions/intern/vtree_multi_function_network/mappings_sockets.cc b/source/blender/functions/intern/vtree_multi_function_network/mappings_sockets.cc
index b785eca4f2b..0615f24580b 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/mappings_sockets.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/mappings_sockets.cc
@@ -10,87 +10,56 @@ namespace FN {
/* Socket Inserters
**********************************************************/
-static MFBuilderOutputSocket &INSERT_vector_socket(VTreeMFNetworkBuilder &builder,
- const VSocket &vsocket)
+static void INSERT_vector_socket(VSocketMFNetworkBuilder &builder)
{
BLI::float3 value;
- RNA_float_get_array(vsocket.rna(), "value", value);
-
- const MultiFunction &fn = builder.construct_fn<FN::MF_ConstantValue<BLI::float3>>(value);
- MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
- return *node.outputs()[0];
+ RNA_float_get_array(builder.rna(), "value", value);
+ builder.set_constant_value(value);
}
-static MFBuilderOutputSocket &INSERT_color_socket(VTreeMFNetworkBuilder &builder,
- const VSocket &vsocket)
+static void INSERT_color_socket(VSocketMFNetworkBuilder &builder)
{
BLI::rgba_f value;
- RNA_float_get_array(vsocket.rna(), "value", value);
-
- const MultiFunction &fn = builder.construct_fn<FN::MF_ConstantValue<BLI::rgba_f>>(value);
- MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
- return *node.outputs()[0];
+ RNA_float_get_array(builder.rna(), "value", value);
+ builder.set_constant_value(value);
}
-static MFBuilderOutputSocket &INSERT_float_socket(VTreeMFNetworkBuilder &builder,
- const VSocket &vsocket)
+static void INSERT_float_socket(VSocketMFNetworkBuilder &builder)
{
- float value = RNA_float_get(vsocket.rna(), "value");
-
- const MultiFunction &fn = builder.construct_fn<FN::MF_ConstantValue<float>>(value);
- MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
- return *node.outputs()[0];
+ float value = RNA_float_get(builder.rna(), "value");
+ builder.set_constant_value(value);
}
-static MFBuilderOutputSocket &INSERT_bool_socket(VTreeMFNetworkBuilder &builder,
- const VSocket &vsocket)
+static void INSERT_bool_socket(VSocketMFNetworkBuilder &builder)
{
- bool value = RNA_boolean_get(vsocket.rna(), "value");
-
- const MultiFunction &fn = builder.construct_fn<FN::MF_ConstantValue<bool>>(value);
- MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
- return *node.outputs()[0];
+ bool value = RNA_boolean_get(builder.rna(), "value");
+ builder.set_constant_value(value);
}
-static MFBuilderOutputSocket &INSERT_int_socket(VTreeMFNetworkBuilder &builder,
- const VSocket &vsocket)
+static void INSERT_int_socket(VSocketMFNetworkBuilder &builder)
{
- int value = RNA_int_get(vsocket.rna(), "value");
-
- const MultiFunction &fn = builder.construct_fn<FN::MF_ConstantValue<int>>(value);
- MFBuilderFunctionNode &node = builder.add_function(fn, {}, {0});
- return *node.outputs()[0];
+ int value = RNA_int_get(builder.rna(), "value");
+ builder.set_constant_value(value);
}
-static MFBuilderOutputSocket &INSERT_object_socket(VTreeMFNetworkBuilder &builder,
- const VSocket &vsocket)
+static void INSERT_object_socket(VSocketMFNetworkBuilder &builder)
{
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list