Cycles / HSV Separator and Combine node:
[blender.git] / intern / cycles / render / nodes.cpp
index bd718ed51e5420d58bc38a8c839cf2be0bb9a5ef..b5107315d4c0232e3cab3421676455c5d8b45d41 100644 (file)
@@ -2651,6 +2651,37 @@ void CombineRGBNode::compile(OSLCompiler& compiler)
        compiler.add(this, "node_combine_rgb");
 }
 
+/* Combine HSV */
+CombineHSVNode::CombineHSVNode()
+: ShaderNode("combine_hsv")
+{
+       add_input("H", SHADER_SOCKET_FLOAT);
+       add_input("S", SHADER_SOCKET_FLOAT);
+       add_input("V", SHADER_SOCKET_FLOAT);
+       add_output("Color", SHADER_SOCKET_COLOR);
+}
+
+void CombineHSVNode::compile(SVMCompiler& compiler)
+{
+       ShaderInput *hue_in = input("H");
+       ShaderInput *saturation_in = input("S");
+       ShaderInput *value_in = input("V");
+       ShaderOutput *color_out = output("Color");
+
+       compiler.stack_assign(color_out);
+       compiler.stack_assign(hue_in);
+       compiler.stack_assign(saturation_in);
+       compiler.stack_assign(value_in);
+       
+       compiler.add_node(NODE_COMBINE_HSV, hue_in->stack_offset, saturation_in->stack_offset, value_in->stack_offset);
+       compiler.add_node(NODE_COMBINE_HSV, color_out->stack_offset);
+}
+
+void CombineHSVNode::compile(OSLCompiler& compiler)
+{
+       compiler.add(this, "node_combine_hsv");
+}
+
 /* Gamma */
 GammaNode::GammaNode()
 : ShaderNode("gamma")
@@ -2744,7 +2775,39 @@ void SeparateRGBNode::compile(OSLCompiler& compiler)
        compiler.add(this, "node_separate_rgb");
 }
 
-/* Separate RGB */
+/* Separate HSV */
+SeparateHSVNode::SeparateHSVNode()
+: ShaderNode("separate_rgb")
+{
+       add_input("Color", SHADER_SOCKET_COLOR);
+       add_output("H", SHADER_SOCKET_FLOAT);
+       add_output("S", SHADER_SOCKET_FLOAT);
+       add_output("V", SHADER_SOCKET_FLOAT);
+}
+
+void SeparateHSVNode::compile(SVMCompiler& compiler)
+{
+       ShaderInput *color_in = input("Color");
+       ShaderOutput *hue_out = output("H");
+       ShaderOutput *saturation_out = output("S");
+       ShaderOutput *value_out = output("V");
+
+       compiler.stack_assign(color_in);
+       compiler.stack_assign(hue_out);
+       compiler.stack_assign(saturation_out);
+       compiler.stack_assign(value_out);
+       
+       compiler.add_node(NODE_SEPARATE_HSV, color_in->stack_offset, hue_out->stack_offset, saturation_out->stack_offset);
+       compiler.add_node(NODE_SEPARATE_HSV, value_out->stack_offset);
+
+}
+
+void SeparateHSVNode::compile(OSLCompiler& compiler)
+{
+       compiler.add(this, "node_separate_hsv");
+}
+
+/* Hue Saturation Value */
 HSVNode::HSVNode()
 : ShaderNode("hsv")
 {