workaround for compositor threading copying actions every time.

(commit 27684 by Campbell from render25 branch)
This commit is contained in:
Brecht Van Lommel
2010-03-23 15:34:07 +00:00
parent f46cccedf6
commit 9ca5243df8

View File

@@ -2519,10 +2519,39 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview)
/* local tree then owns all compbufs */
bNodeTree *ntreeLocalize(bNodeTree *ntree)
{
bNodeTree *ltree= ntreeCopyTree(ntree, 0);
bNodeTree *ltree;
bNode *node;
bNodeSocket *sock;
bAction *action_backup= NULL, *tmpact_backup= NULL;
/* Workaround for copying an action on each render!
* set action to NULL so animdata actions dont get copied */
AnimData *adt= BKE_animdata_from_id(&ntree->id);
if(adt) {
action_backup= adt->action;
tmpact_backup= adt->tmpact;
adt->action= NULL;
adt->tmpact= NULL;
}
/* node copy func */
ltree= ntreeCopyTree(ntree, 0);
if(adt) {
AnimData *ladt= BKE_animdata_from_id(&ltree->id);
ladt->action = action_backup;
ladt->tmpact = tmpact_backup;
if(action_backup) action_backup->id.us++;
if(tmpact_backup) tmpact_backup->id.us++;
}
/* end animdata uglyness */
/* move over the compbufs */
/* right after ntreeCopyTree() oldsock pointers are valid */
for(node= ntree->nodes.first; node; node= node->next) {