Commit: 3e533af70207e78ed83d4213a3caa169970c7608 Author: Jacques Lucke Date: Fri Feb 14 11:29:49 2020 +0100 Branches: functions https://developer.blender.org/rB3e533af70207e78ed83d4213a3caa169970c7608
make some functions more reusable =================================================================== M source/blender/functions/CMakeLists.txt M source/blender/functions/FN_multi_functions.h M source/blender/functions/intern/initialize.cc A source/blender/functions/intern/multi_functions/global_functions.cc A source/blender/functions/intern/multi_functions/global_functions.h M source/blender/functions/intern/node_tree_multi_function_network/builder.h M source/blender/functions/intern/node_tree_multi_function_network/mappings_nodes.cc =================================================================== diff --git a/source/blender/functions/CMakeLists.txt b/source/blender/functions/CMakeLists.txt index 53b61cfe89c..fc9f97a6fcf 100644 --- a/source/blender/functions/CMakeLists.txt +++ b/source/blender/functions/CMakeLists.txt @@ -24,6 +24,7 @@ endif() set(SRC intern/multi_functions/constants.cc + intern/multi_functions/global_functions.cc intern/multi_functions/lists.cc intern/multi_functions/mixed.cc intern/multi_functions/network.cc @@ -71,6 +72,7 @@ set(SRC intern/multi_functions/constants.h intern/multi_functions/customizable.h + intern/multi_functions/global_functions.h intern/multi_functions/lists.h intern/multi_functions/mixed.h intern/multi_functions/network.h diff --git a/source/blender/functions/FN_multi_functions.h b/source/blender/functions/FN_multi_functions.h index 2c9b4ac5a9d..ff59767f518 100644 --- a/source/blender/functions/FN_multi_functions.h +++ b/source/blender/functions/FN_multi_functions.h @@ -9,5 +9,6 @@ #include "intern/multi_functions/particles.h" #include "intern/multi_functions/surface_hook.h" #include "intern/multi_functions/vectorize.h" +#include "intern/multi_functions/global_functions.h" #endif /* __FN_MULTI_FUNCTIONS_H__ */ diff --git a/source/blender/functions/intern/initialize.cc b/source/blender/functions/intern/initialize.cc index 962998e6796..f079aaa7837 100644 --- a/source/blender/functions/intern/initialize.cc +++ b/source/blender/functions/intern/initialize.cc @@ -1,15 +1,18 @@ #include "FN_initialize.h" #include "cpp_types.h" #include "node_tree_multi_function_network/mappings.h" +#include "multi_functions/global_functions.h" void FN_initialize(void) { FN::init_cpp_types(); + FN::init_global_functions(); FN::MFGeneration::init_function_tree_mf_mappings(); } void FN_exit(void) { FN::MFGeneration::free_function_tree_mf_mappings(); + FN::free_global_functions(); FN::free_cpp_types(); } diff --git a/source/blender/functions/intern/multi_functions/global_functions.cc b/source/blender/functions/intern/multi_functions/global_functions.cc new file mode 100644 index 00000000000..31d2f667a34 --- /dev/null +++ b/source/blender/functions/intern/multi_functions/global_functions.cc @@ -0,0 +1,33 @@ +#include "global_functions.h" +#include "FN_multi_functions.h" + +namespace FN { + +const MultiFunction *MF_GLOBAL_add_floats_2 = nullptr; +const MultiFunction *MF_GLOBAL_multiply_floats_2 = nullptr; +const MultiFunction *MF_GLOBAL_subtract_floats = nullptr; +const MultiFunction *MF_GLOBAL_safe_division_floats = nullptr; + +void init_global_functions() +{ + MF_GLOBAL_add_floats_2 = new MF_Custom_In2_Out1<float, float, float>( + "add 2 floats", [](float a, float b) { return a + b; }, BLI_RAND_PER_LINE_UINT32); + MF_GLOBAL_multiply_floats_2 = new MF_Custom_In2_Out1<float, float, float>( + "multiply 2 floats", [](float a, float b) { return a * b; }, BLI_RAND_PER_LINE_UINT32); + MF_GLOBAL_subtract_floats = new MF_Custom_In2_Out1<float, float, float>( + "subtract 2 floats", [](float a, float b) { return a - b; }, BLI_RAND_PER_LINE_UINT32); + MF_GLOBAL_safe_division_floats = new MF_Custom_In2_Out1<float, float, float>( + "safe divide 2 floats", + [](float a, float b) { return (b != 0.0f) ? a / b : 0.0f; }, + BLI_RAND_PER_LINE_UINT32); +} + +void free_global_functions() +{ + delete MF_GLOBAL_add_floats_2; + delete MF_GLOBAL_multiply_floats_2; + delete MF_GLOBAL_subtract_floats; + delete MF_GLOBAL_safe_division_floats; +} + +} // namespace FN diff --git a/source/blender/functions/intern/multi_functions/global_functions.h b/source/blender/functions/intern/multi_functions/global_functions.h new file mode 100644 index 00000000000..6a77ec16621 --- /dev/null +++ b/source/blender/functions/intern/multi_functions/global_functions.h @@ -0,0 +1,15 @@ +#pragma once + +#include "FN_multi_function.h" + +namespace FN { + +void init_global_functions(); +void free_global_functions(); + +extern const MultiFunction *MF_GLOBAL_add_floats_2; +extern const MultiFunction *MF_GLOBAL_multiply_floats_2; +extern const MultiFunction *MF_GLOBAL_subtract_floats; +extern const MultiFunction *MF_GLOBAL_safe_division_floats; + +} // namespace FN diff --git a/source/blender/functions/intern/node_tree_multi_function_network/builder.h b/source/blender/functions/intern/node_tree_multi_function_network/builder.h index 895b28c82a6..6c22beb6280 100644 --- a/source/blender/functions/intern/node_tree_multi_function_network/builder.h +++ b/source/blender/functions/intern/node_tree_multi_function_network/builder.h @@ -346,6 +346,12 @@ class FNodeMFBuilder : public CommonBuilderBase { Args &&... args) { const MultiFunction &base_fn = this->construct_fn<T>(std::forward<Args>(args)...); + this->set_vectorized_matching_fn(is_vectorized_prop_names, base_fn); + } + + void set_vectorized_matching_fn(ArrayRef<const char *> is_vectorized_prop_names, + const MultiFunction &base_fn) + { const MultiFunction &fn = this->get_vectorized_function(base_fn, is_vectorized_prop_names); this->set_matching_fn(fn); } diff --git a/source/blender/functions/intern/node_tree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/node_tree_multi_function_network/mappings_nodes.cc index efdfe63fe7d..ea77b560e14 100644 --- a/source/blender/functions/intern/node_tree_multi_function_network/mappings_nodes.cc +++ b/source/blender/functions/intern/node_tree_multi_function_network/mappings_nodes.cc @@ -179,6 +179,11 @@ static void build_math_fn_in2_out1(FNodeMFBuilder &builder, {"use_list__a", "use_list__b"}, builder.fnode().name(), element_func, operation_hash); } +static void build_math_fn_in2_out1(FNodeMFBuilder &builder, const MultiFunction &base_fn) +{ + builder.set_vectorized_matching_fn({"use_list__a", "use_list__b"}, base_fn); +} + template<typename T, typename FuncT> static void build_variadic_math_fn(FNodeMFBuilder &builder, FuncT element_func, @@ -233,16 +238,12 @@ static void INSERT_maximum_floats(FNodeMFBuilder &builder) static void INSERT_subtract_floats(FNodeMFBuilder &builder) { - build_math_fn_in2_out1<float, float, float>( - builder, [](float a, float b) -> float { return a - b; }, BLI_RAND_PER_LINE_UINT32); + build_math_fn_in2_out1(builder, *MF_GLOBAL_subtract_floats); } static void INSERT_divide_floats(FNodeMFBuilder &builder) { - build_math_fn_in2_out1<float, float, float>( - builder, - [](float a, float b) -> float { return (b != 0.0f) ? a / b : 0.0f; }, - BLI_RAND_PER_LINE_UINT32); + build_math_fn_in2_out1(builder, *MF_GLOBAL_safe_division_floats); } static void INSERT_power_floats(FNodeMFBuilder &builder) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs