[Bf-blender-cvs] [98bf859] master: Blender Internal: Add shader nodes "Separate HSV" and "Combine HSV", same as Cycles' ones.

IRIE Shinsuke noreply at git.blender.org
Thu Nov 21 05:14:03 CET 2013


Commit: 98bf859efc1835c9df28d7727854438de81825a7
Author: IRIE Shinsuke
Date:   Thu Nov 21 04:02:00 2013 +0900
http://developer.blender.org/rB98bf859efc1835c9df28d7727854438de81825a7

Blender Internal: Add shader nodes "Separate HSV" and "Combine HSV", same as Cycles' ones.

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

M	release/scripts/startup/nodeitems_builtins.py
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c

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

diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 71ff547..fdda753 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -141,6 +141,8 @@ shader_node_categories = [
         NodeItem("ShaderNodeSqueeze"),
         NodeItem("ShaderNodeSeparateRGB"),
         NodeItem("ShaderNodeCombineRGB"),
+        NodeItem("ShaderNodeSeparateHSV"),
+        NodeItem("ShaderNodeCombineHSV"),
         ]),
     ShaderOldNodeCategory("SH_GROUP", "Group", items=node_group_items),
     ShaderOldNodeCategory("SH_LAYOUT", "Layout", items=[
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 5e5fac3..b2c7c2e 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -735,6 +735,21 @@ void combine_rgb(float r, float g, float b, out vec4 col)
 	col = vec4(r, g, b, 1.0);
 }
 
+void separate_hsv(vec4 col, out float h, out float s, out float v)
+{
+	vec4 hsv;
+
+	rgb_to_hsv(col, hsv);
+	h = hsv[0];
+	s = hsv[1];
+	v = hsv[2];
+}
+
+void combine_hsv(float h, float s, float v, out vec4 col)
+{
+	hsv_to_rgb(vec4(h, s, v, 1.0), col);
+}
+
 void output_node(vec4 rgb, float alpha, out vec4 outrgb)
 {
 	outrgb = vec4(rgb.rgb, alpha);
diff --git a/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c b/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c
index 707e295..2c515d5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c
+++ b/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c
@@ -44,13 +44,26 @@ static bNodeSocketTemplate sh_node_sephsv_out[] = {
 	{	-1, 0, ""	}
 };
 
+static void node_shader_exec_sephsv(void *UNUSED(data), int UNUSED(thread), bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), bNodeStack **in, bNodeStack **out)
+{
+	rgb_to_hsv(in[0]->vec[0], in[0]->vec[1], in[0]->vec[2],
+		   &out[0]->vec[0], &out[1]->vec[0], &out[2]->vec[0]);
+}
+
+static int gpu_shader_sephsv(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+{
+	return GPU_stack_link(mat, "separate_hsv", in, out);
+}
+
 void register_node_type_sh_sephsv(void)
 {
 	static bNodeType ntype;
 
 	sh_node_type_base(&ntype, SH_NODE_SEPHSV, "Separate HSV", NODE_CLASS_CONVERTOR, 0);
-	node_type_compatibility(&ntype, NODE_NEW_SHADING);
+	node_type_compatibility(&ntype, NODE_OLD_SHADING | NODE_NEW_SHADING);
 	node_type_socket_templates(&ntype, sh_node_sephsv_in, sh_node_sephsv_out);
+	node_type_exec(&ntype, NULL, NULL, node_shader_exec_sephsv);
+	node_type_gpu(&ntype, gpu_shader_sephsv);
 
 	nodeRegisterType(&ntype);
 }
@@ -68,13 +81,26 @@ static bNodeSocketTemplate sh_node_combhsv_out[] = {
 	{	-1, 0, ""	}
 };
 
+static void node_shader_exec_combhsv(void *UNUSED(data), int UNUSED(thread), bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), bNodeStack **in, bNodeStack **out)
+{
+	hsv_to_rgb(in[0]->vec[0], in[1]->vec[0], in[2]->vec[0],
+		   &out[0]->vec[0], &out[0]->vec[1], &out[0]->vec[2]);
+}
+
+static int gpu_shader_combhsv(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+{
+	return GPU_stack_link(mat, "combine_hsv", in, out);
+}
+
 void register_node_type_sh_combhsv(void)
 {
 	static bNodeType ntype;
 
 	sh_node_type_base(&ntype, SH_NODE_COMBHSV, "Combine HSV", NODE_CLASS_CONVERTOR, 0);
-	node_type_compatibility(&ntype, NODE_NEW_SHADING);
+	node_type_compatibility(&ntype, NODE_OLD_SHADING | NODE_NEW_SHADING);
 	node_type_socket_templates(&ntype, sh_node_combhsv_in, sh_node_combhsv_out);
+	node_type_exec(&ntype, NULL, NULL, node_shader_exec_combhsv);
+	node_type_gpu(&ntype, gpu_shader_combhsv);
 
 	nodeRegisterType(&ntype);
 }




More information about the Bf-blender-cvs mailing list