From b66659377598999f2596288415c3b52224388532 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 11 Jun 2015 23:09:38 +0200 Subject: Cycles: Remove Bump Node from the graph, if Height input is not connected. This way we can avoid building the split kernel with NODE_FEATURE_BUMP enabled, in case we don't need it. --- intern/cycles/render/graph.cpp | 17 ++++++++++++++++- intern/cycles/render/graph.h | 1 + intern/cycles/render/nodes.cpp | 2 ++ intern/cycles/render/nodes.h | 1 - 4 files changed, 19 insertions(+), 2 deletions(-) (limited to 'intern') diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp index 9adf6b4b1ed..e0537101247 100644 --- a/intern/cycles/render/graph.cpp +++ b/intern/cycles/render/graph.cpp @@ -419,6 +419,21 @@ void ShaderGraph::remove_unneeded_nodes() } } } + else if(node->special_type == SHADER_SPECIAL_TYPE_BUMP) { + BumpNode *bump = static_cast(node); + + if(bump->outputs[0]->links.size()) { + /* Height input not connected */ + /* ToDo: Strength zero? */ + if(!bump->inputs[0]->link) { + vector inputs = bump->outputs[0]->links; + + relink(bump->inputs, inputs, NULL); + removed[bump->id] = true; + any_node_removed = true; + } + } + } else if(node->special_type == SHADER_SPECIAL_TYPE_MIX_CLOSURE) { MixClosureNode *mix = static_cast(node); @@ -560,7 +575,7 @@ void ShaderGraph::clean() else delete node; } - + nodes = newnodes; } diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h index 93341b56d99..9117fd03a95 100644 --- a/intern/cycles/render/graph.h +++ b/intern/cycles/render/graph.h @@ -84,6 +84,7 @@ enum ShaderNodeSpecialType { SHADER_SPECIAL_TYPE_IMAGE_SLOT, SHADER_SPECIAL_TYPE_CLOSURE, SHADER_SPECIAL_TYPE_EMISSION, + SHADER_SPECIAL_TYPE_BUMP, }; /* Enum diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 430c059d686..69ae2078216 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -3934,6 +3934,8 @@ BumpNode::BumpNode() { invert = false; + special_type = SHADER_SPECIAL_TYPE_BUMP; + /* this input is used by the user, but after graph transform it is no longer * used and moved to sampler center/x/y instead */ add_input("Height", SHADER_SOCKET_FLOAT); diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index 4e78d58aaf3..7ec20f0879b 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -652,7 +652,6 @@ public: SHADER_NODE_CLASS(BumpNode) bool has_spatial_varying() { return true; } virtual int get_feature() { - /* TODO(sergey): Check for incoming links. */ return NODE_FEATURE_BUMP; } -- cgit v1.2.3