diff options
Diffstat (limited to 'source/blender/nodes/composite/node_composite_tree.c')
-rw-r--r-- | source/blender/nodes/composite/node_composite_tree.c | 70 |
1 files changed, 39 insertions, 31 deletions
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index b526c25e2dc..b266af15060 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -59,6 +59,7 @@ #include "NOD_composite.h" #include "node_composite_util.h" +#include "COM_compositor.h" static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func) { @@ -72,16 +73,16 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func) static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func) { - func(calldata, NODE_CLASS_INPUT, IFACE_("Input")); - func(calldata, NODE_CLASS_OUTPUT, IFACE_("Output")); - func(calldata, NODE_CLASS_OP_COLOR, IFACE_("Color")); - func(calldata, NODE_CLASS_OP_VECTOR, IFACE_("Vector")); - func(calldata, NODE_CLASS_OP_FILTER, IFACE_("Filter")); - func(calldata, NODE_CLASS_CONVERTOR, IFACE_("Convertor")); - func(calldata, NODE_CLASS_MATTE, IFACE_("Matte")); - func(calldata, NODE_CLASS_DISTORT, IFACE_("Distort")); - func(calldata, NODE_CLASS_GROUP, IFACE_("Group")); - func(calldata, NODE_CLASS_LAYOUT, IFACE_("Layout")); + func(calldata, NODE_CLASS_INPUT, N_("Input")); + func(calldata, NODE_CLASS_OUTPUT, N_("Output")); + func(calldata, NODE_CLASS_OP_COLOR, N_("Color")); + func(calldata, NODE_CLASS_OP_VECTOR, N_("Vector")); + func(calldata, NODE_CLASS_OP_FILTER, N_("Filter")); + func(calldata, NODE_CLASS_CONVERTOR, N_("Convertor")); + func(calldata, NODE_CLASS_MATTE, N_("Matte")); + func(calldata, NODE_CLASS_DISTORT, N_("Distort")); + func(calldata, NODE_CLASS_GROUP, N_("Group")); + func(calldata, NODE_CLASS_LAYOUT, N_("Layout")); } static void free_node_cache(bNodeTree *UNUSED(ntree), bNode *node) @@ -136,7 +137,7 @@ static void localize(bNodeTree *localtree, bNodeTree *ntree) 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); + node->new_node->id= (ID *)node->id; else node->new_node->id= NULL; } @@ -575,20 +576,19 @@ static void ntree_composite_texnode(bNodeTree *ntree, int init) } /* optimized tree execute test for compositing */ -void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview) +/* optimized tree execute test for compositing */ +static void ntreeCompositExecTreeOld(bNodeTree *ntree, RenderData *rd, int do_preview) { bNodeExec *nodeexec; bNode *node; ListBase threads; ThreadData thdata; int totnode, curnode, rendering= 1, n; - bNodeTreeExec *exec; - - if (ntree==NULL) return; - - exec = ntree->execdata; - - if (do_preview) + bNodeTreeExec *exec= ntree->execdata; + + if(ntree==NULL) return; + + if(do_preview) ntreeInitPreview(ntree, 0, 0); if (!ntree->execdata) { @@ -598,7 +598,7 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview) ntree_composite_texnode(ntree, 1); /* prevent unlucky accidents */ - if (G.background) + if(G.background) rd->scemode &= ~R_COMP_CROP; /* setup callerdata for thread callback */ @@ -613,15 +613,15 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview) BLI_init_threads(&threads, exec_composite_node, rd->threads); - while (rendering) { + while(rendering) { - if (BLI_available_threads(&threads)) { + if(BLI_available_threads(&threads)) { nodeexec= getExecutableNode(exec); - if (nodeexec) { + if(nodeexec) { node = nodeexec->node; - if (ntree->progress && totnode) + if(ntree->progress && totnode) ntree->progress(ntree->prh, (1.0f - curnode/(float)totnode)); - if (ntree->stats_draw) { + if(ntree->stats_draw) { char str[128]; BLI_snprintf(str, sizeof(str), "Compositing %d %s", curnode, node->name); ntree->stats_draw(ntree->sdh, str); @@ -640,21 +640,21 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview) rendering= 0; /* test for ESC */ - if (ntree->test_break && ntree->test_break(ntree->tbh)) { - for (node= ntree->nodes.first; node; node= node->next) + if(ntree->test_break && ntree->test_break(ntree->tbh)) { + for(node= ntree->nodes.first; node; node= node->next) node->exec |= NODE_READY; } /* check for ready ones, and if we need to continue */ - for (n=0, nodeexec=exec->nodeexec; n < exec->totnodes; ++n, ++nodeexec) { + for(n=0, nodeexec=exec->nodeexec; n < exec->totnodes; ++n, ++nodeexec) { node = nodeexec->node; - if (node->exec & NODE_READY) { - if ((node->exec & NODE_FINISHED)==0) { + if(node->exec & NODE_READY) { + if((node->exec & NODE_FINISHED)==0) { BLI_remove_thread(&threads, nodeexec); /* this waits for running thread to finish btw */ node->exec |= NODE_FINISHED; /* freeing unused buffers */ - if (rd->scemode & R_COMP_FREE) + if(rd->scemode & R_COMP_FREE) freeExecutableNode(exec); } } @@ -668,6 +668,14 @@ void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int do_preview) ntreeCompositEndExecTree(exec, 1); } +void ntreeCompositExecTree(bNodeTree *ntree, RenderData *rd, int rendering, int do_preview) +{ + if(G.rt == 200) + ntreeCompositExecTreeOld(ntree, rd, do_preview); + else + COM_execute(ntree, rendering); +} + /* *********************************************** */ /* clumsy checking... should do dynamic outputs once */ |