[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