diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-10-12 16:55:32 +0400 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-10-12 16:55:32 +0400 |
commit | a85f595721e44cb214262b688f8c418018f1c5c2 (patch) | |
tree | 7621533afabb535b325329000b7374bcfb96d674 /source/blender/nodes | |
parent | 5a3540f4d8f8e674eaea96d6ce63f87b685c29ef (diff) |
Fix for #28886, compositor cache regression bug.
The problem was that all outputs got tagged indiscriminately (esp. hidden render layer sockets), leading to full recalculation every time. This was caused by erroneous tagging of bNodeStacks with hasinput/hasoutput flags. This patch restores the old behaviour of tagging all non-static stacks as input values and all outputs that are connected to some input. Only difference is in node groups, where the hasoutput flag is no longer abused for tagging internal buffers, here the is_copy flag is used instead.
Diffstat (limited to 'source/blender/nodes')
-rw-r--r-- | source/blender/nodes/intern/node_exec.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c index 608347bc258..53bbb27f9b0 100644 --- a/source/blender/nodes/intern/node_exec.c +++ b/source/blender/nodes/intern/node_exec.c @@ -174,11 +174,13 @@ bNodeTreeExec *ntree_exec_begin(bNodeTree *ntree) exec->stacksize = index; exec->stack = MEM_callocN(exec->stacksize * sizeof(bNodeStack), "bNodeStack"); + /* all non-const results are considered inputs */ + for (n=0; n < exec->stacksize; ++n) + exec->stack[n].hasinput = 1; + /* prepare group tree inputs */ for (sock=ntree->inputs.first; sock; sock=sock->next) { ns = setup_stack(exec->stack, sock); - if (ns->hasoutput) - ns->hasinput = 1; } /* prepare all internal nodes for execution */ for(n=0, nodeexec= exec->nodeexec; n < totnodes; ++n, ++nodeexec) { @@ -191,14 +193,12 @@ bNodeTreeExec *ntree_exec_begin(bNodeTree *ntree) node->need_exec= 0; ns = setup_stack(exec->stack, sock); - if (ns->hasoutput) - ns->hasinput = 1; + ns->hasoutput = 1; } /* tag all outputs */ for (sock=node->outputs.first; sock; sock=sock->next) { ns = setup_stack(exec->stack, sock); - ns->hasoutput = 1; } if(node->typeinfo->initexecfunc) |