Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-07-02 13:56:41 +0400
committerTon Roosendaal <ton@blender.org>2006-07-02 13:56:41 +0400
commit5e30fb119c2445a99308ac5864599deb81d8fd0e (patch)
tree55cd22c8a3f4e242d894041f70d1ee60489a3114 /source
parent348a4c03c66780634f47a28d956b89dfc00d2385 (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.c4
-rw-r--r--source/blender/src/sequence.c23
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) {