diff options
author | Thomas Dinges <blender@dingto.org> | 2015-06-12 00:09:38 +0300 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2015-06-12 00:09:38 +0300 |
commit | b66659377598999f2596288415c3b52224388532 (patch) | |
tree | cbfeda36a42492fca303cf814eb685f86dc911e9 /intern | |
parent | 96d9801423be600268afc57c078063cd9906f609 (diff) |
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.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/graph.cpp | 17 | ||||
-rw-r--r-- | intern/cycles/render/graph.h | 1 | ||||
-rw-r--r-- | intern/cycles/render/nodes.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/nodes.h | 1 |
4 files changed, 19 insertions, 2 deletions
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<BumpNode*>(node); + + if(bump->outputs[0]->links.size()) { + /* Height input not connected */ + /* ToDo: Strength zero? */ + if(!bump->inputs[0]->link) { + vector<ShaderInput*> 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<MixClosureNode*>(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; } |