Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorThomas Dinges <blender@dingto.org>2015-06-12 00:09:38 +0300
committerThomas Dinges <blender@dingto.org>2015-06-12 00:09:38 +0300
commitb66659377598999f2596288415c3b52224388532 (patch)
treecbfeda36a42492fca303cf814eb685f86dc911e9 /intern
parent96d9801423be600268afc57c078063cd9906f609 (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.cpp17
-rw-r--r--intern/cycles/render/graph.h1
-rw-r--r--intern/cycles/render/nodes.cpp2
-rw-r--r--intern/cycles/render/nodes.h1
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;
}