diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-03-13 20:23:44 +0300 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-03-13 20:23:44 +0300 |
commit | 2907826d8ccbad1d55583ff87b306eec50eec997 (patch) | |
tree | 0d6f44468222f1b2d645c1836e3ea935710cbf5e /source/blender/blenkernel/intern/node.c | |
parent | 70340503d8edc108aa195b44d90489a3440679f0 (diff) |
Fixed the node_recurs_check function used to define the order of nodes in ntreeSolveOrder. This was creating equal node levels in some cases (auto-linking viewer to nodes further downstream), leading to falsely detected circular dependencies.
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index ccb38ca7ce1..d5c53d20d07 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1759,32 +1759,29 @@ void ntreeSocketUseFlags(bNodeTree *ntree) /* ************** dependency stuff *********** */ /* node is guaranteed to be not checked before */ -static int node_recurs_check(bNode *node, bNode ***nsort, int level) +static int node_recurs_check(bNode *node, bNode ***nsort) { bNode *fromnode; bNodeSocket *sock; - int has_inputlinks= 0; + int level = 0xFFF; node->done= 1; - level++; for(sock= node->inputs.first; sock; sock= sock->next) { if(sock->link) { - has_inputlinks= 1; fromnode= sock->link->fromnode; - if(fromnode && fromnode->done==0) { - fromnode->level= node_recurs_check(fromnode, nsort, level); + if(fromnode) { + if (fromnode->done==0) + fromnode->level= node_recurs_check(fromnode, nsort); + if (fromnode->level <= level) + level = fromnode->level - 1; } } } -// printf("node sort %s level %d\n", node->name, level); **nsort= node; (*nsort)++; - if(has_inputlinks) - return level; - else - return 0xFFF; + return level; } @@ -1873,7 +1870,7 @@ void ntreeSolveOrder(bNodeTree *ntree) /* recursive check */ for(node= ntree->nodes.first; node; node= node->next) { if(node->done==0) { - node->level= node_recurs_check(node, &nsort, 0); + node->level= node_recurs_check(node, &nsort); } } |