diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-03-23 18:34:07 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-03-23 18:34:07 +0300 |
commit | 9ca5243df8f97907145298b357403ffa1edcac8a (patch) | |
tree | 61f6381c6684c370d5f1ec602a9cf67bee86a082 /source/blender/blenkernel | |
parent | f46cccedf62bc30a8ce68d7e48fa011dd37491f7 (diff) |
workaround for compositor threading copying actions every time.
(commit 27684 by Campbell from render25 branch)
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 98db81d90d0..3ac8f565003 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -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(<ree->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) { |