diff options
author | Ton Roosendaal <ton@blender.org> | 2006-07-02 13:56:41 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-07-02 13:56:41 +0400 |
commit | 5e30fb119c2445a99308ac5864599deb81d8fd0e (patch) | |
tree | 55cd22c8a3f4e242d894041f70d1ee60489a3114 /source | |
parent | 348a4c03c66780634f47a28d956b89dfc00d2385 (diff) |
Bugfix #4561
Sequence renders, calling scenes with compositing, didn't execute composite
correctly. Confusement caused by the rule that a "Render" handle has same
name as Scene, which gives conflict for the case when a Scene has
sequencing with Scene strips with its own scene in it.
The previous solution for that conflict caused composite not to work. This
commit solves that, but it is still hackish. Main reason is the still
bad global G.scene, in use by compositor.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/node_composite.c | 4 | ||||
-rw-r--r-- | source/blender/src/sequence.c | 23 |
2 files changed, 18 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/node_composite.c b/source/blender/blenkernel/intern/node_composite.c index 0a002d4c1b0..7b22f9e324f 100644 --- a/source/blender/blenkernel/intern/node_composite.c +++ b/source/blender/blenkernel/intern/node_composite.c @@ -619,7 +619,7 @@ static void node_composit_exec_composite(void *data, bNode *node, bNodeStack **i if(node->flag & NODE_DO_OUTPUT) { /* only one works on out */ RenderData *rd= data; if(rd->scemode & R_DOCOMP) { - RenderResult *rr= RE_GetResult(RE_GetRender(G.scene->id.name)); + RenderResult *rr= RE_GetResult(RE_GetRender(G.scene->id.name)); /* G.scene is WEAK! */ if(rr) { CompBuf *outbuf, *zbuf=NULL; @@ -963,7 +963,7 @@ static CompBuf *compbuf_from_pass(RenderData *rd, RenderLayer *rl, int rectx, in static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { - Scene *sce= node->id?(Scene *)node->id:G.scene; + Scene *sce= node->id?(Scene *)node->id:G.scene; /* G.scene is WEAK! */ RenderData *rd= data; RenderResult *rr; diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index b67951b3a1c..075ba650ef5 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -891,19 +891,23 @@ static void do_build_seq_ibuf(Sequence * seq, int cfra) Scene *sce= seq->scene, *oldsce= G.scene; Render *re; RenderResult rres; - int doseq; + int doseq, rendering= G.rendering; + char scenename[64]; waitcursor(1); - /* This function can be called from do_render_seq(), in that case - the seq->scene can already have a Render, so we use a default name. + /* Hack! This function can be called from do_render_seq(), in that case + the seq->scene can already have a Render initialized with same name, + so we have to use a default name. (compositor uses G.scene name to + find render). However, when called from within the UI (image preview in sequencer) we do want to use scene Render, that way the render result is defined for display in render/imagewindow */ - if(G.rendering) - re= RE_NewRender(" do_build_seq_ibuf"); - else - re= RE_NewRender(sce->id.name); + if(rendering) { + BLI_strncpy(scenename, sce->id.name+2, 64); + strcpy(sce->id.name+2, " do_build_seq_ibuf"); + } + re= RE_NewRender(sce->id.name); /* prevent eternal loop */ doseq= sce->r.scemode & R_DOSEQ; @@ -916,6 +920,11 @@ static void do_build_seq_ibuf(Sequence * seq, int cfra) RE_BlenderFrame(re, sce, seq->sfra + se->nr); if(sce!=oldsce) set_scene_bg(oldsce); + /* UGLY WARNING, it is set to zero in RE_BlenderFrame */ + G.rendering= rendering; + if(rendering) + BLI_strncpy(sce->id.name+2, scenename, 64); + RE_GetResultImage(re, &rres); if(rres.rectf) { |