Commit: 93c6cf496edff358c919d62295c031fc5eebb155 Author: Lukas Stockner Date: Tue Jun 21 00:19:51 2016 +0200 Branches: master https://developer.blender.org/rB93c6cf496edff358c919d62295c031fc5eebb155
Cycles: Deduplicate Vector and RGB Curve nodes Since most of the code for these two nodes was identical, this commit now instead uses a common base class that implements all the functionality. =================================================================== M intern/cycles/render/nodes.cpp M intern/cycles/render/nodes.h =================================================================== diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 5efbf65..1a9adb0 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -4885,42 +4885,25 @@ bool BumpNode::constant_fold(ShaderGraph *graph, ShaderOutput *, ShaderInput *) return false; } -/* RGBCurvesNode */ - -NODE_DEFINE(RGBCurvesNode) -{ - NodeType* type = NodeType::add("rgb_curves", create, NodeType::SHADER); - - SOCKET_COLOR_ARRAY(curves, "Curves", array<float3>()); - SOCKET_FLOAT(min_x, "Min X", 0.0f); - SOCKET_FLOAT(max_x, "Max X", 1.0f); - - SOCKET_IN_FLOAT(fac, "Fac", 0.0f); - SOCKET_IN_COLOR(color, "Color", make_float3(0.0f, 0.0f, 0.0f)); - SOCKET_OUT_COLOR(color, "Color"); - - return type; -} +/* Curve node */ -RGBCurvesNode::RGBCurvesNode() +CurvesNode::CurvesNode(const NodeType *node_type) : ShaderNode(node_type) { } -void RGBCurvesNode::compile(SVMCompiler& compiler) +void CurvesNode::compile(SVMCompiler& compiler, int type, ShaderInput *value_in, ShaderOutput *value_out) { if(curves.size() == 0) return; ShaderInput *fac_in = input("Fac"); - ShaderInput *color_in = input("Color"); - ShaderOutput *color_out = output("Color"); - compiler.add_node(NODE_RGB_CURVES, + compiler.add_node(type, compiler.encode_uchar4(compiler.stack_assign(fac_in), - compiler.stack_assign(color_in), - compiler.stack_assign(color_out)), + compiler.stack_assign(value_in), + compiler.stack_assign(value_out)), __float_as_int(min_x), __float_as_int(max_x)); @@ -4929,7 +4912,7 @@ void RGBCurvesNode::compile(SVMCompiler& compiler) compiler.add_node(float3_to_float4(curves[i])); } -void RGBCurvesNode::compile(OSLCompiler& compiler) +void CurvesNode::compile(OSLCompiler& compiler, const char* name) { if(curves.size() == 0) return; @@ -4937,7 +4920,50 @@ void RGBCurvesNode::compile(OSLCompiler& compiler) compiler.parameter_color_array("ramp", curves); compiler.parameter(this, "min_x"); compiler.parameter(this, "max_x"); - compiler.add(this, "node_rgb_curves"); + compiler.add(this, name); +} + +void CurvesNode::compile(SVMCompiler& /*compiler*/) +{ + assert(0); +} + +void CurvesNode::compile(OSLCompiler& /*compiler*/) +{ + assert(0); +} + +/* RGBCurvesNode */ + +NODE_DEFINE(RGBCurvesNode) +{ + NodeType* type = NodeType::add("rgb_curves", create, NodeType::SHADER); + + SOCKET_COLOR_ARRAY(curves, "Curves", array<float3>()); + SOCKET_FLOAT(min_x, "Min X", 0.0f); + SOCKET_FLOAT(max_x, "Max X", 1.0f); + + SOCKET_IN_FLOAT(fac, "Fac", 0.0f); + SOCKET_IN_COLOR(value, "Color", make_float3(0.0f, 0.0f, 0.0f)); + + SOCKET_OUT_COLOR(value, "Color"); + + return type; +} + +RGBCurvesNode::RGBCurvesNode() +: CurvesNode(node_type) +{ +} + +void RGBCurvesNode::compile(SVMCompiler& compiler) +{ + CurvesNode::compile(compiler, NODE_RGB_CURVES, input("Color"), output("Color")); +} + +void RGBCurvesNode::compile(OSLCompiler& compiler) +{ + CurvesNode::compile(compiler, "node_rgb_curves"); } /* VectorCurvesNode */ @@ -4951,48 +4977,26 @@ NODE_DEFINE(VectorCurvesNode) SOCKET_FLOAT(max_x, "Max X", 1.0f); SOCKET_IN_FLOAT(fac, "Fac", 0.0f); - SOCKET_IN_VECTOR(vector, "Vector", make_float3(0.0f, 0.0f, 0.0f)); + SOCKET_IN_VECTOR(value, "Vector", make_float3(0.0f, 0.0f, 0.0f)); - SOCKET_OUT_VECTOR(vector, "Vector"); + SOCKET_OUT_VECTOR(value, "Vector"); return type; } VectorCurvesNode::VectorCurvesNode() -: ShaderNode(node_type) +: CurvesNode(node_type) { } void VectorCurvesNode::compile(SVMCompiler& compiler) { - if(curves.size() == 0) - return; - - ShaderInput *fac_in = input("Fac"); - ShaderInput *vector_in = input("Vector"); - ShaderOutput *vector_out = output("Vector"); - - compiler.add_node(NODE_VECTOR_CURVES, - compiler.encode_uchar4(compiler.stack_assign(fac_in), - compiler.stack_assign(vector_in), - compiler.stack_assign(vector_out)), - __float_as_int(min_x), - __float_as_int(max_x)); - - compiler.add_node(curves.size()); - for(int i = 0; i < curves.size(); i++) - compiler.add_node(float3_to_float4(curves[i])); + CurvesNode::compile(compiler, NODE_VECTOR_CURVES, input("Vector"), output("Vector")); } void VectorCurvesNode::compile(OSLCompiler& compiler) { - if(curves.size() == 0) - return; - - compiler.parameter_color_array("ramp", curves); - compiler.parameter(this, "min_x"); - compiler.parameter(this, "max_x"); - compiler.add(this, "node_vector_curves"); + CurvesNode::compile(compiler, "node_vector_curves"); } /* RGBRampNode */ diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index 978908f..3245fdf 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -875,26 +875,30 @@ public: float distance; }; -class RGBCurvesNode : public ShaderNode { +class CurvesNode : public ShaderNode { public: - SHADER_NODE_CLASS(RGBCurvesNode) + explicit CurvesNode(const NodeType *node_type); + SHADER_NODE_BASE_CLASS(CurvesNode); virtual int get_group() { return NODE_GROUP_LEVEL_3; } + bool has_spatial_varying() { return true; } + void compile(SVMCompiler& compiler, int type, ShaderInput *value_in, ShaderOutput *value_out); + void compile(OSLCompiler& compiler, const char *name); + array<float3> curves; float min_x, max_x, fac; - float3 color; + float3 value; }; -class VectorCurvesNode : public ShaderNode { +class RGBCurvesNode : public CurvesNode { public: - SHADER_NODE_CLASS(VectorCurvesNode) - - virtual int get_group() { return NODE_GROUP_LEVEL_3; } + SHADER_NODE_CLASS(RGBCurvesNode) +}; - array<float3> curves; - float min_x, max_x, fac; - float3 vector; +class VectorCurvesNode : public CurvesNode { +public: + SHADER_NODE_CLASS(VectorCurvesNode) }; class RGBRampNode : public ShaderNode { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs