forked from bartvdbraak/blender
Cycles: Fix memory leak in shader graph when bump graph is used
This commit is contained in:
parent
0b78b8f167
commit
5d564da3b6
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user