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

This commit is contained in:
Sergey Sharybin 2016-01-05 21:18:02 +05:00
parent 0b78b8f167
commit 5d564da3b6
2 changed files with 11 additions and 3 deletions

@ -210,8 +210,7 @@ ShaderGraph::ShaderGraph()
ShaderGraph::~ShaderGraph() ShaderGraph::~ShaderGraph()
{ {
foreach(ShaderNode *node, nodes) clear_nodes();
delete node;
} }
ShaderNode *ShaderGraph::add(ShaderNode *node) ShaderNode *ShaderGraph::add(ShaderNode *node)
@ -240,7 +239,7 @@ ShaderGraph *ShaderGraph::copy()
copy_nodes(nodes_all, nodes_copy); copy_nodes(nodes_all, nodes_copy);
/* add nodes (in same order, so output is still first) */ /* add nodes (in same order, so output is still first) */
newgraph->nodes.clear(); newgraph->clear_nodes();
foreach(ShaderNode *node, nodes) foreach(ShaderNode *node, nodes)
newgraph->add(nodes_copy[node]); 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) void ShaderGraph::copy_nodes(ShaderNodeSet& nodes, ShaderNodeMap& nnodemap)
{ {
/* copy a set of nodes, and the links between them. the assumption is /* copy a set of nodes, and the links between them. the assumption is

@ -323,6 +323,7 @@ protected:
typedef pair<ShaderNode* const, ShaderNode*> NodePair; typedef pair<ShaderNode* const, ShaderNode*> NodePair;
void find_dependencies(ShaderNodeSet& dependencies, ShaderInput *input); void find_dependencies(ShaderNodeSet& dependencies, ShaderInput *input);
void clear_nodes();
void copy_nodes(ShaderNodeSet& nodes, ShaderNodeMap& nnodemap); void copy_nodes(ShaderNodeSet& nodes, ShaderNodeMap& nnodemap);
void break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack); void break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack);