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
path: root/source
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2011-10-12 16:55:32 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2011-10-12 16:55:32 +0400
commita85f595721e44cb214262b688f8c418018f1c5c2 (patch)
tree7621533afabb535b325329000b7374bcfb96d674 /source
parent5a3540f4d8f8e674eaea96d6ce63f87b685c29ef (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')
-rw-r--r--source/blender/nodes/intern/node_exec.c10
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)