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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user