[Bf-blender-cvs] [8e1ced75964] functions-experimental-refactor: bring back color nodes

Jacques Lucke noreply at git.blender.org
Fri Nov 8 18:31:18 CET 2019


Commit: 8e1ced75964bc9ba5d269d7c77eb7d619c1607fc
Author: Jacques Lucke
Date:   Fri Nov 8 17:32:20 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rB8e1ced75964bc9ba5d269d7c77eb7d619c1607fc

bring back color nodes

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

D	release/scripts/startup/nodes/function_nodes/call.py
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/functions/intern/multi_functions/mixed.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/release/scripts/startup/nodes/function_nodes/call.py b/release/scripts/startup/nodes/function_nodes/call.py
deleted file mode 100644
index 6b24d646a47..00000000000
--- a/release/scripts/startup/nodes/function_nodes/call.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import bpy
-from bpy.props import *
-from .. base import FunctionNode
-
-class CallNode(bpy.types.Node, FunctionNode):
-    bl_idname = "fn_CallNode"
-    bl_label = "Call"
-
-    function_tree: PointerProperty(
-        name="Function Tree",
-        type=bpy.types.NodeTree,
-        update=FunctionNode.sync_tree,
-    )
-
-    def declaration(self, builder):
-        if self.function_tree is None:
-            return
-        builder.tree_interface_input("inputs", self.function_tree, "IN")
-        builder.tree_interface_output("outputs", self.function_tree, "OUT")
-
-    def draw(self, layout):
-        layout.prop(self, "function_tree", text="")
-
-    def iter_dependency_trees(self):
-        if self.function_tree is not None:
-            yield self.function_tree
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index d4607b8888d..64e4a6cec17 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -13,6 +13,7 @@
 namespace FN {
 
 using BLI::float3;
+using BLI::rgba_f;
 
 MF_AddFloats::MF_AddFloats()
 {
@@ -54,6 +55,58 @@ void MF_AddFloat3s::call(const MFMask &mask, MFParams &params, MFContext &UNUSED
   }
 }
 
+MF_CombineColor::MF_CombineColor()
+{
+  MFSignatureBuilder signature("Combine Color");
+  signature.readonly_single_input<float>("R");
+  signature.readonly_single_input<float>("G");
+  signature.readonly_single_input<float>("B");
+  signature.readonly_single_input<float>("A");
+  signature.single_output<rgba_f>("Color");
+  this->set_signature(signature);
+}
+
+void MF_CombineColor::call(const MFMask &mask, MFParams &params, MFContext &UNUSED(context)) const
+{
+  VirtualListRef<float> r = params.readonly_single_input<float>(0, "R");
+  VirtualListRef<float> g = params.readonly_single_input<float>(1, "G");
+  VirtualListRef<float> b = params.readonly_single_input<float>(2, "B");
+  VirtualListRef<float> a = params.readonly_single_input<float>(3, "A");
+  MutableArrayRef<rgba_f> color = params.single_output<rgba_f>(4, "Color");
+
+  for (uint i : mask.indices()) {
+    color[i] = {r[i], g[i], b[i], a[i]};
+  }
+}
+
+MF_SeparateColor::MF_SeparateColor()
+{
+  MFSignatureBuilder signature("Separate Color");
+  signature.readonly_single_input<rgba_f>("Color");
+  signature.single_output<float>("R");
+  signature.single_output<float>("G");
+  signature.single_output<float>("B");
+  signature.single_output<float>("A");
+  this->set_signature(signature);
+}
+
+void MF_SeparateColor::call(const MFMask &mask, MFParams &params, MFContext &UNUSED(context)) const
+{
+  auto color = params.readonly_single_input<rgba_f>(0, "Color");
+  auto r = params.single_output<float>(1, "R");
+  auto g = params.single_output<float>(2, "G");
+  auto b = params.single_output<float>(3, "B");
+  auto a = params.single_output<float>(4, "A");
+
+  for (uint i : mask.indices()) {
+    rgba_f v = color[i];
+    r[i] = v.r;
+    g[i] = v.g;
+    b[i] = v.b;
+    a[i] = v.a;
+  }
+}
+
 MF_CombineVector::MF_CombineVector()
 {
   MFSignatureBuilder signature("Combine Vector");
@@ -66,10 +119,10 @@ MF_CombineVector::MF_CombineVector()
 
 void MF_CombineVector::call(const MFMask &mask, MFParams &params, MFContext &UNUSED(context)) const
 {
-  auto x = params.readonly_single_input<float>(0, "X");
-  auto y = params.readonly_single_input<float>(1, "Y");
-  auto z = params.readonly_single_input<float>(2, "Z");
-  auto vector = params.single_output<float3>(3, "Vector");
+  VirtualListRef<float> x = params.readonly_single_input<float>(0, "X");
+  VirtualListRef<float> y = params.readonly_single_input<float>(1, "Y");
+  VirtualListRef<float> z = params.readonly_single_input<float>(2, "Z");
+  MutableArrayRef<float3> vector = params.single_output<float3>(3, "Vector");
 
   for (uint i : mask.indices()) {
     vector[i] = {x[i], y[i], z[i]};
diff --git a/source/blender/functions/intern/multi_functions/mixed.h b/source/blender/functions/intern/multi_functions/mixed.h
index cb1bc3eceb6..8c7bc3467e0 100644
--- a/source/blender/functions/intern/multi_functions/mixed.h
+++ b/source/blender/functions/intern/multi_functions/mixed.h
@@ -16,6 +16,18 @@ class MF_AddFloat3s final : public MultiFunction {
   void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
 };
 
+class MF_CombineColor final : public MultiFunction {
+ public:
+  MF_CombineColor();
+  void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
+};
+
+class MF_SeparateColor final : public MultiFunction {
+ public:
+  MF_SeparateColor();
+  void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
+};
+
 class MF_CombineVector final : public MultiFunction {
  public:
   MF_CombineVector();
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 303e980da4a..8b0dfcb45c1 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
@@ -33,6 +33,25 @@ static const MultiFunction &get_vectorized_function(
   }
 }
 
+static void INSERT_combine_color(VTreeMFNetworkBuilder &builder, const VNode &vnode)
+{
+  const MultiFunction &base_fn = builder.construct_fn<FN::MF_CombineColor>();
+  const MultiFunction &fn = get_vectorized_function(
+      builder,
+      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);
+}
+
+static void INSERT_separate_color(VTreeMFNetworkBuilder &builder, const VNode &vnode)
+{
+  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);
+}
+
 static void INSERT_combine_vector(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
   const MultiFunction &base_fn = builder.construct_fn<FN::MF_CombineVector>();
@@ -391,6 +410,8 @@ static void INSERT_boolean_not(VTreeMFNetworkBuilder &builder, const VNode &vnod
 
 void add_vtree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
 {
+  mappings.vnode_inserters.add_new("fn_CombineColorNode", INSERT_combine_color);
+  mappings.vnode_inserters.add_new("fn_SeparateColorNode", INSERT_separate_color);
   mappings.vnode_inserters.add_new("fn_CombineVectorNode", INSERT_combine_vector);
   mappings.vnode_inserters.add_new("fn_SeparateVectorNode", INSERT_separate_vector);
   mappings.vnode_inserters.add_new("fn_ListLengthNode", INSERT_list_length);
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 ff78c82d9f6..c88fe9170a7 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
@@ -21,6 +21,17 @@ static MFBuilderOutputSocket &INSERT_vector_socket(VTreeMFNetworkBuilder &builde
   return *node.outputs()[0];
 }
 
+static MFBuilderOutputSocket &INSERT_color_socket(VTreeMFNetworkBuilder &builder,
+                                                  const VSocket &vsocket)
+{
+  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];
+}
+
 static MFBuilderOutputSocket &INSERT_float_socket(VTreeMFNetworkBuilder &builder,
                                                   const VSocket &vsocket)
 {
@@ -163,6 +174,7 @@ void add_vtree_socket_mapping_info(VTreeMultiFunctionMappings &mappings)
   add_basic_type<Object *>(mappings, "Object", INSERT_object_socket);
   add_basic_type<std::string>(mappings, "Text", INSERT_text_socket);
   add_basic_type<bool>(mappings, "Boolean", INSERT_bool_socket);
+  add_basic_type<BLI::rgba_f>(mappings, "Color", INSERT_color_socket);
 
   add_bidirectional_implicit_conversion<float, int32_t>(mappings);
   add_bidirectional_implicit_conversion<float, bool>(mappings);



More information about the Bf-blender-cvs mailing list