Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2011-03-13 20:23:44 +0300
committerLukas Toenne <lukas.toenne@googlemail.com>2011-03-13 20:23:44 +0300
commit2907826d8ccbad1d55583ff87b306eec50eec997 (patch)
tree0d6f44468222f1b2d645c1836e3ea935710cbf5e /source/blender
parent70340503d8edc108aa195b44d90489a3440679f0 (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')
-rw-r--r--source/blender/blenkernel/intern/node.c21
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);
}
}