static void local_merge(bNodeTree *localtree, bNodeTree *ntree) { bNode *lnode; bNodeSocket *lsock; /* move over the compbufs and previews */ BKE_node_preview_merge_tree(ntree, localtree, true); for (lnode = localtree->nodes.first; lnode; lnode = lnode->next) { if (ntreeNodeExists(ntree, lnode->new_node)) { if (ELEM(lnode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { if (lnode->id && (lnode->flag & NODE_DO_OUTPUT)) { /* image_merge does sanity check for pointers */ BKE_image_merge((Image *)lnode->new_node->id, (Image *)lnode->id); } } else if (lnode->type == CMP_NODE_MOVIEDISTORTION) { /* special case for distortion node: distortion context is allocating in exec function * and to achieve much better performance on further calls this context should be * copied back to original node */ if (lnode->storage) { if (lnode->new_node->storage) BKE_tracking_distortion_free(lnode->new_node->storage); lnode->new_node->storage = BKE_tracking_distortion_copy(lnode->storage); } } for (lsock = lnode->outputs.first; lsock; lsock = lsock->next) { if (ntreeOutputExists(lnode->new_node, lsock->new_sock)) { lsock->new_sock->cache = lsock->cache; lsock->cache = NULL; lsock->new_sock = NULL; } } } } }
static void local_merge(bNodeTree *localtree, bNodeTree *ntree) { BKE_node_preview_merge_tree(ntree, localtree, true); }