static void localize(bNodeTree *localtree, bNodeTree *UNUSED(ntree)) { bNode *node, *node_next; /* replace muted nodes and reroute nodes by internal links */ for (node = localtree->nodes.first; node; node = node_next) { node_next = node->next; if (node->flag & NODE_MUTED || node->type == NODE_REROUTE) { nodeInternalRelink(localtree, node); nodeFreeNode(localtree, node); } } }
/* local tree then owns all compbufs */ static void localize(bNodeTree *localtree, bNodeTree *ntree) { bNode *node, *node_next; bNodeSocket *sock; for (node= ntree->nodes.first; node; node= node->next) { /* ensure new user input gets handled ok */ node->need_exec= 0; /* move over the compbufs */ /* right after ntreeCopyTree() oldsock pointers are valid */ if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { if (node->id) { if (node->flag & NODE_DO_OUTPUT) node->new_node->id= (ID *)BKE_image_copy((Image *)node->id); else node->new_node->id= NULL; } } for (sock= node->outputs.first; sock; sock= sock->next) { sock->new_sock->cache= sock->cache; compbuf_set_node(sock->new_sock->cache, node->new_node); sock->cache= NULL; sock->new_sock->new_sock= sock; } } /* replace muted nodes by internal links */ for (node= localtree->nodes.first; node; node= node_next) { node_next = node->next; if (node->flag & NODE_MUTED) { /* make sure the update tag isn't lost when removing the muted node. * propagate this to all downstream nodes. */ if (node->need_exec) { bNodeLink *link; for (link=localtree->links.first; link; link=link->next) if (link->fromnode==node && link->tonode) link->tonode->need_exec = 1; } nodeInternalRelink(localtree, node); nodeFreeNode(localtree, node); } } }
/* local tree then owns all compbufs */ static void localize(bNodeTree *localtree, bNodeTree *ntree) { bNode *node, *node_next; bNodeSocket *sock; for (node= ntree->nodes.first; node; node= node->next) { /* ensure new user input gets handled ok */ node->need_exec= 0; node->new_node->original = node; /* move over the compbufs */ /* right after ntreeCopyTree() oldsock pointers are valid */ if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { if (node->id) { if (node->flag & NODE_DO_OUTPUT) node->new_node->id= (ID *)node->id; else node->new_node->id= NULL; } } /* copy over the preview buffers to update graduatly */ if (node->preview) { bNodePreview *preview = MEM_callocN(sizeof(bNodePreview), "Preview"); preview->pad = node->preview->pad; preview->xsize = node->preview->xsize; preview->ysize = node->preview->ysize; preview->rect = MEM_dupallocN(node->preview->rect); node->new_node->preview = preview; } for (sock= node->outputs.first; sock; sock= sock->next) { sock->new_sock->cache= sock->cache; #ifdef WITH_COMPOSITOR_LEGACY compbuf_set_node(sock->new_sock->cache, node->new_node); #endif sock->cache= NULL; sock->new_sock->new_sock= sock; } } /* replace muted nodes and reroute nodes by internal links */ for (node= localtree->nodes.first; node; node= node_next) { node_next = node->next; if (node->flag & NODE_MUTED || node->type == NODE_REROUTE) { /* make sure the update tag isn't lost when removing the muted node. * propagate this to all downstream nodes. */ if (node->need_exec) { bNodeLink *link; for (link=localtree->links.first; link; link=link->next) if (link->fromnode==node && link->tonode) link->tonode->need_exec = 1; } nodeInternalRelink(localtree, node); nodeFreeNode(localtree, node); } } }