diff options
Diffstat (limited to 'source/blender/nodes/intern')
-rw-r--r-- | source/blender/nodes/intern/CMP_nodes/CMP_composite.c | 7 | ||||
-rw-r--r-- | source/blender/nodes/intern/CMP_nodes/CMP_image.c | 10 | ||||
-rw-r--r-- | source/blender/nodes/intern/CMP_nodes/CMP_levels.c | 4 | ||||
-rw-r--r-- | source/blender/nodes/intern/CMP_util.c | 9 | ||||
-rw-r--r-- | source/blender/nodes/intern/TEX_util.c | 14 | ||||
-rw-r--r-- | source/blender/nodes/intern/TEX_util.h | 2 |
6 files changed, 24 insertions, 22 deletions
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_composite.c b/source/blender/nodes/intern/CMP_nodes/CMP_composite.c index ee9545c3196..800cccc2bfc 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_composite.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_composite.c @@ -50,7 +50,8 @@ static void node_composit_exec_composite(void *data, bNode *node, bNodeStack **i RenderData *rd= data; if(scene && (rd->scemode & R_DOCOMP)) { - RenderResult *rr= RE_GetResult(RE_GetRender(scene->id.name)); + Render *re= RE_GetRender(scene->id.name); + RenderResult *rr= RE_AcquireResultWrite(re); if(rr) { CompBuf *outbuf, *zbuf=NULL; @@ -78,11 +79,15 @@ static void node_composit_exec_composite(void *data, bNode *node, bNodeStack **i rr->rectf= outbuf->rect; outbuf->malloc= 0; free_compbuf(outbuf); + + RE_ReleaseResult(re); /* signal for imageviewer to refresh (it converts to byte rects...) */ BKE_image_signal(BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"), NULL, IMA_SIGNAL_FREE); return; } + else + RE_ReleaseResult(re); } } if(in[0]->data) diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_image.c b/source/blender/nodes/intern/CMP_nodes/CMP_image.c index 5f444357776..00be52a81aa 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_image.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_image.c @@ -350,11 +350,12 @@ void node_composit_rlayers_out(RenderData *rd, RenderLayer *rl, bNodeStack **out static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { Scene *sce= (Scene *)node->id; + Render *re= (sce)? RE_GetRender(sce->id.name): NULL; RenderData *rd= data; RenderResult *rr= NULL; - if(sce) - rr= RE_GetResult(RE_GetRender(sce->id.name)); + if(re) + rr= RE_AcquireResultRead(re); if(rr) { SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1); @@ -389,7 +390,10 @@ static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in, } } } - } + } + + if(re) + RE_ReleaseResult(re); }; diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_levels.c b/source/blender/nodes/intern/CMP_nodes/CMP_levels.c index 28b769a8a97..6056e9a28f4 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_levels.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_levels.c @@ -329,8 +329,8 @@ bNodeType cmp_node_view_levels= { /* execfunc */ node_composit_exec_view_levels, /* butfunc */ NULL, /* initfunc */ node_composit_init_view_levels, - /* freestoragefunc */ node_free_standard_storage, - /* copystoragefunc */ node_copy_standard_storage, + /* freestoragefunc */ NULL, + /* copystoragefunc */ NULL, /* id */ NULL }; diff --git a/source/blender/nodes/intern/CMP_util.c b/source/blender/nodes/intern/CMP_util.c index b396d5549d7..075eefb4368 100644 --- a/source/blender/nodes/intern/CMP_util.c +++ b/source/blender/nodes/intern/CMP_util.c @@ -614,7 +614,9 @@ void generate_preview(bNode *node, CompBuf *stackbuf) if(stackbuf->rect==NULL && stackbuf->rect_procedural==NULL) return; stackbuf_use= typecheck_compbuf(stackbuf, CB_RGBA); - + + BLI_lock_thread(LOCK_PREVIEW); + if(stackbuf->x > stackbuf->y) { preview->xsize= 140; preview->ysize= (140*stackbuf->y)/stackbuf->x; @@ -628,14 +630,15 @@ void generate_preview(bNode *node, CompBuf *stackbuf) cbuf= generate_procedural_preview(stackbuf_use, preview->xsize, preview->ysize); else cbuf= scalefast_compbuf(stackbuf_use, preview->xsize, preview->ysize); - + /* this ensures free-compbuf does the right stuff */ SWAP(float *, cbuf->rect, node->preview->rect); + + BLI_unlock_thread(LOCK_PREVIEW); free_compbuf(cbuf); if(stackbuf_use!=stackbuf) free_compbuf(stackbuf_use); - } } diff --git a/source/blender/nodes/intern/TEX_util.c b/source/blender/nodes/intern/TEX_util.c index 2c21627dad9..f2333ffcf2e 100644 --- a/source/blender/nodes/intern/TEX_util.c +++ b/source/blender/nodes/intern/TEX_util.c @@ -47,8 +47,6 @@ #define PREV_RES 128 /* default preview resolution */ -int preview_flag = 0; - void tex_call_delegate(TexDelegate *dg, float *out, TexParams *params, short thread) { if(dg->node->need_exec) @@ -217,7 +215,8 @@ void ntreeTexExecTree( short thread, Tex *tex, short which_output, - int cfra + int cfra, + int preview ){ TexResult dummy_texres; TexCallData data; @@ -231,21 +230,14 @@ void ntreeTexExecTree( data.dxt = dxt; data.dyt = dyt; data.target = texres; - data.do_preview = preview_flag; + data.do_preview = preview; data.thread = thread; data.which_output = which_output; data.cfra= cfra; - preview_flag = 0; - ntreeExecTree(nodes, &data, thread); } -void ntreeTexSetPreviewFlag(int doit) -{ - preview_flag = doit; -} - char* ntreeTexOutputMenu(bNodeTree *ntree) { bNode *node; diff --git a/source/blender/nodes/intern/TEX_util.h b/source/blender/nodes/intern/TEX_util.h index 87a9cf288d6..fd3d47f4729 100644 --- a/source/blender/nodes/intern/TEX_util.h +++ b/source/blender/nodes/intern/TEX_util.h @@ -102,8 +102,6 @@ float tex_input_value(bNodeStack *in, TexParams *params, short thread); void tex_output(bNode *node, bNodeStack **in, bNodeStack *out, TexFn texfn); void tex_do_preview(bNode *node, bNodeStack *ns, TexCallData *cdata); -void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, float *dxt, float *dyt, short thread, struct Tex *tex, short which_output, int cfra); - void params_from_cdata(TexParams *out, TexCallData *in); #endif |