[Bf-blender-cvs] [5d564da] master: Cycles: Fix memory leak in shader graph when bump graph is used

Sergey Sharybin noreply at git.blender.org
Tue Jan 5 17:21:09 CET 2016


Commit: 5d564da3b66b541e6295a899eae05e43b479def2
Author: Sergey Sharybin
Date:   Tue Jan 5 21:18:02 2016 +0500
Branches: master
https://developer.blender.org/rB5d564da3b66b541e6295a899eae05e43b479def2

Cycles: Fix memory leak in shader graph when bump graph is used

===================================================================

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 852aaca..32c1769 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -210,8 +210,7 @@ ShaderGraph::ShaderGraph()
 
 ShaderGraph::~ShaderGraph()
 {
-	foreach(ShaderNode *node, nodes)
-		delete node;
+	clear_nodes();
 }
 
 ShaderNode *ShaderGraph::add(ShaderNode *node)
@@ -240,7 +239,7 @@ ShaderGraph *ShaderGraph::copy()
 	copy_nodes(nodes_all, nodes_copy);
 
 	/* add nodes (in same order, so output is still first) */
-	newgraph->nodes.clear();
+	newgraph->clear_nodes();
 	foreach(ShaderNode *node, nodes)
 		newgraph->add(nodes_copy[node]);
 
@@ -354,6 +353,14 @@ void ShaderGraph::find_dependencies(ShaderNodeSet& dependencies, ShaderInput *in
 	}
 }
 
+void ShaderGraph::clear_nodes()
+{
+	foreach(ShaderNode *node, nodes) {
+		delete node;
+	}
+	nodes.clear();
+}
+
 void ShaderGraph::copy_nodes(ShaderNodeSet& nodes, ShaderNodeMap& nnodemap)
 {
 	/* copy a set of nodes, and the links between them. the assumption is
diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h
index 0382cbc..214199a 100644
--- a/intern/cycles/render/graph.h
+++ b/intern/cycles/render/graph.h
@@ -323,6 +323,7 @@ protected:
 	typedef pair<ShaderNode* const, ShaderNode*> NodePair;
 
 	void find_dependencies(ShaderNodeSet& dependencies, ShaderInput *input);
+	void clear_nodes();
 	void copy_nodes(ShaderNodeSet& nodes, ShaderNodeMap& nnodemap);
 
 	void break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack);




More information about the Bf-blender-cvs mailing list