Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Dinges <blender@dingto.org>2014-06-13 23:44:48 +0400
committerThomas Dinges <blender@dingto.org>2014-06-13 23:59:14 +0400
commit3de3987ea190415d0d088c3917b45f44afb43840 (patch)
tree35577ec3798ee74ee4c37821ec74981b3c9d7342 /intern/cycles/render
parent49df707496e505c8a8b21c1ea36b479e950cc66c (diff)
Cycles: Add dedicated nodes to split/combine vectors.
This was already possible via the RGB nodes, but that seems weird.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/nodes.cpp68
-rw-r--r--intern/cycles/render/nodes.h10
2 files changed, 78 insertions, 0 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 2d7f9ea848b..d49a719f4e7 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -3056,6 +3056,40 @@ void CombineRGBNode::compile(OSLCompiler& compiler)
compiler.add(this, "node_combine_rgb");
}
+/* Combine XYZ */
+CombineXYZNode::CombineXYZNode()
+: ShaderNode("combine_xyz")
+{
+ add_input("X", SHADER_SOCKET_FLOAT);
+ add_input("Y", SHADER_SOCKET_FLOAT);
+ add_input("Z", SHADER_SOCKET_FLOAT);
+ add_output("Vector", SHADER_SOCKET_VECTOR);
+}
+
+void CombineXYZNode::compile(SVMCompiler& compiler)
+{
+ ShaderInput *x_in = input("X");
+ ShaderInput *y_in = input("Y");
+ ShaderInput *z_in = input("Z");
+ ShaderOutput *vector_out = output("Vector");
+
+ compiler.stack_assign(vector_out);
+
+ compiler.stack_assign(x_in);
+ compiler.add_node(NODE_COMBINE_XYZ, x_in->stack_offset, 0, vector_out->stack_offset);
+
+ compiler.stack_assign(y_in);
+ compiler.add_node(NODE_COMBINE_XYZ, y_in->stack_offset, 1, vector_out->stack_offset);
+
+ compiler.stack_assign(z_in);
+ compiler.add_node(NODE_COMBINE_XYZ, z_in->stack_offset, 2, vector_out->stack_offset);
+}
+
+void CombineXYZNode::compile(OSLCompiler& compiler)
+{
+ compiler.add(this, "node_combine_xyz");
+}
+
/* Combine HSV */
CombineHSVNode::CombineHSVNode()
: ShaderNode("combine_hsv")
@@ -3180,6 +3214,40 @@ void SeparateRGBNode::compile(OSLCompiler& compiler)
compiler.add(this, "node_separate_rgb");
}
+/* Separate XYZ */
+SeparateXYZNode::SeparateXYZNode()
+: ShaderNode("separate_xyz")
+{
+ add_input("Vector", SHADER_SOCKET_VECTOR);
+ add_output("X", SHADER_SOCKET_FLOAT);
+ add_output("Y", SHADER_SOCKET_FLOAT);
+ add_output("Z", SHADER_SOCKET_FLOAT);
+}
+
+void SeparateXYZNode::compile(SVMCompiler& compiler)
+{
+ ShaderInput *vector_in = input("Vector");
+ ShaderOutput *x_out = output("X");
+ ShaderOutput *y_out = output("Y");
+ ShaderOutput *z_out = output("Z");
+
+ compiler.stack_assign(vector_in);
+
+ compiler.stack_assign(x_out);
+ compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 0, x_out->stack_offset);
+
+ compiler.stack_assign(y_out);
+ compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 1, y_out->stack_offset);
+
+ compiler.stack_assign(z_out);
+ compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 2, z_out->stack_offset);
+}
+
+void SeparateXYZNode::compile(OSLCompiler& compiler)
+{
+ compiler.add(this, "node_separate_xyz");
+}
+
/* Separate HSV */
SeparateHSVNode::SeparateHSVNode()
: ShaderNode("separate_hsv")
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 8bdce9901b2..cf89bdadaa2 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -451,6 +451,11 @@ public:
SHADER_NODE_CLASS(CombineHSVNode)
};
+class CombineXYZNode : public ShaderNode {
+public:
+ SHADER_NODE_CLASS(CombineXYZNode)
+};
+
class GammaNode : public ShaderNode {
public:
SHADER_NODE_CLASS(GammaNode)
@@ -471,6 +476,11 @@ public:
SHADER_NODE_CLASS(SeparateHSVNode)
};
+class SeparateXYZNode : public ShaderNode {
+public:
+ SHADER_NODE_CLASS(SeparateXYZNode)
+};
+
class HSVNode : public ShaderNode {
public:
SHADER_NODE_CLASS(HSVNode)