[Bf-blender-cvs] [1aa8f0d] master: Cleanup / Cycles: Code de-duplication for graph node relinking.
Thomas Dinges
noreply at git.blender.org
Thu Jan 22 09:59:22 CET 2015
Commit: 1aa8f0d3c02f65c4e70a5e87dd45f44a135a66a2
Author: Thomas Dinges
Date: Thu Jan 22 09:58:11 2015 +0100
Branches: master
https://developer.blender.org/rB1aa8f0d3c02f65c4e70a5e87dd45f44a135a66a2
Cleanup / Cycles: Code de-duplication for graph node relinking.
Differential Revision: https://developer.blender.org/D1018
===================================================================
M intern/cycles/render/graph.cpp
M intern/cycles/render/graph.h
===================================================================
diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp
index 84fe55b..6d05e52 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -227,6 +227,21 @@ void ShaderGraph::disconnect(ShaderInput *to)
from->links.erase(remove(from->links.begin(), from->links.end(), to), from->links.end());
}
+void ShaderGraph::relink(vector<ShaderInput*> inputs, vector<ShaderInput*> outputs, ShaderOutput *output)
+{
+ /* Remove nodes and re-link if output isn't NULL. */
+ foreach(ShaderInput *sock, inputs) {
+ if(sock->link)
+ disconnect(sock);
+ }
+
+ foreach(ShaderInput *sock, outputs) {
+ disconnect(sock);
+ if(output)
+ connect(output, sock);
+ }
+}
+
void ShaderGraph::finalize(bool do_bump, bool do_osl)
{
/* before compiling, the shader graph may undergo a number of modifications.
@@ -383,14 +398,7 @@ void ShaderGraph::remove_unneeded_nodes()
(!bg->inputs[1]->link && bg->inputs[1]->value.x == 0.0f)) {
vector<ShaderInput*> inputs = bg->outputs[0]->links;
- foreach(ShaderInput *sock, bg->inputs) {
- if(sock->link)
- disconnect(sock);
- }
-
- foreach(ShaderInput *input, inputs)
- disconnect(input);
-
+ relink(bg->inputs, inputs, NULL);
removed[bg->id] = true;
any_node_removed = true;
}
@@ -404,15 +412,7 @@ void ShaderGraph::remove_unneeded_nodes()
ShaderOutput *output = mix->inputs[1]->link;
vector<ShaderInput*> inputs = mix->outputs[0]->links;
- foreach(ShaderInput *sock, mix->inputs)
- if(sock->link)
- disconnect(sock);
-
- foreach(ShaderInput *input, inputs) {
- disconnect(input);
- if(output)
- connect(output, input);
- }
+ relink(mix->inputs, inputs, output);
removed[mix->id] = true;
any_node_removed = true;
}
@@ -425,15 +425,7 @@ void ShaderGraph::remove_unneeded_nodes()
ShaderOutput *output = mix->inputs[1]->link;
vector<ShaderInput*> inputs = mix->outputs[0]->links;
- foreach(ShaderInput *sock, mix->inputs)
- if(sock->link)
- disconnect(sock);
-
- foreach(ShaderInput *input, inputs) {
- disconnect(input);
- if(output)
- connect(output, input);
- }
+ relink(mix->inputs, inputs, output);
removed[mix->id] = true;
any_node_removed = true;
}
@@ -441,16 +433,8 @@ void ShaderGraph::remove_unneeded_nodes()
else if(mix->inputs[0]->value.x == 1.0f) {
ShaderOutput *output = mix->inputs[2]->link;
vector<ShaderInput*> inputs = mix->outputs[0]->links;
-
- foreach(ShaderInput *sock, mix->inputs)
- if(sock->link)
- disconnect(sock);
-
- foreach(ShaderInput *input, inputs) {
- disconnect(input);
- if(output)
- connect(output, input);
- }
+
+ relink(mix->inputs, inputs, output);
removed[mix->id] = true;
any_node_removed = true;
}
@@ -467,15 +451,7 @@ void ShaderGraph::remove_unneeded_nodes()
ShaderOutput *output = mix->inputs[1]->link;
vector<ShaderInput*> inputs = mix->outputs[0]->links;
- foreach(ShaderInput *sock, mix->inputs)
- if(sock->link)
- disconnect(sock);
-
- foreach(ShaderInput *input, inputs) {
- disconnect(input);
- if(output)
- connect(output, input);
- }
+ relink(mix->inputs, inputs, output);
removed[mix->id] = true;
any_node_removed = true;
}
@@ -484,15 +460,7 @@ void ShaderGraph::remove_unneeded_nodes()
ShaderOutput *output = mix->inputs[2]->link;
vector<ShaderInput*> inputs = mix->outputs[0]->links;
- foreach(ShaderInput *sock, mix->inputs)
- if(sock->link)
- disconnect(sock);
-
- foreach(ShaderInput *input, inputs) {
- disconnect(input);
- if(output)
- connect(output, input);
- }
+ relink(mix->inputs, inputs, output);
removed[mix->id] = true;
any_node_removed = true;
}
diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h
index f9ac167..6821d01 100644
--- a/intern/cycles/render/graph.h
+++ b/intern/cycles/render/graph.h
@@ -247,6 +247,7 @@ public:
void connect(ShaderOutput *from, ShaderInput *to);
void disconnect(ShaderInput *to);
+ void relink(vector<ShaderInput*> inputs, vector<ShaderInput*> outputs, ShaderOutput *output);
void remove_unneeded_nodes();
void finalize(bool do_bump = false, bool do_osl = false);
More information about the Bf-blender-cvs
mailing list