[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 ¶ms, 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 ¶ms, 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 ¶ms, 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 ¶ms, 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 ¶ms, MFContext &context) const override;
};
+class MF_CombineColor final : public MultiFunction {
+ public:
+ MF_CombineColor();
+ void call(const MFMask &mask, MFParams ¶ms, MFContext &context) const override;
+};
+
+class MF_SeparateColor final : public MultiFunction {
+ public:
+ MF_SeparateColor();
+ void call(const MFMask &mask, MFParams ¶ms, 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