diff options
-rw-r--r-- | source/blender/editors/render/render_internal.cc | 6 | ||||
-rw-r--r-- | source/blender/render/intern/pipeline.c | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/editors/render/render_internal.cc b/source/blender/editors/render/render_internal.cc index 8e9a052381c..cd3b8183d48 100644 --- a/source/blender/editors/render/render_internal.cc +++ b/source/blender/editors/render/render_internal.cc @@ -634,6 +634,12 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec static void current_scene_update(void *rjv, Scene *scene) { RenderJob *rj = static_cast<RenderJob *>(rjv); + + if (rj->current_scene != scene) { + /* Image must be updated when rendered scene changes. */ + BKE_image_partial_update_mark_full_update(rj->image); + } + rj->current_scene = scene; rj->iuser.scene = scene; } diff --git a/source/blender/render/intern/pipeline.c b/source/blender/render/intern/pipeline.c index 739202564af..c2b719e46a7 100644 --- a/source/blender/render/intern/pipeline.c +++ b/source/blender/render/intern/pipeline.c @@ -1122,6 +1122,8 @@ static void do_render_compositor_scenes(Render *re) return; } + bool changed_scene = false; + /* now foreach render-result node we do a full render */ /* results are stored in a way compositor will find it */ GSet *scenes_rendered = BLI_gset_ptr_new(__func__); @@ -1134,11 +1136,20 @@ static void do_render_compositor_scenes(Render *re) do_render_compositor_scene(re, scene, cfra); BLI_gset_add(scenes_rendered, scene); node->typeinfo->updatefunc(restore_scene->nodetree, node); + + if (scene != re->scene) { + changed_scene = true; + } } } } } BLI_gset_free(scenes_rendered, NULL); + + if (changed_scene) { + /* If rendered another scene, switch back to the current scene with compositing nodes. */ + re->current_scene_update(re->suh, re->scene); + } } /* bad call... need to think over proper method still */ |