diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-05-15 20:21:02 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-05-15 20:21:02 +0400 |
commit | 295c37caa406240993ec42bdf698584527950c16 (patch) | |
tree | 69d5e1088ee320ecf35fdbc35420408724e10e1c /source/blender | |
parent | ad87d47fdb7f394219848ea66d55ce71c616821f (diff) |
Fix T39763: Blender renders disabled Render Layers using Blender Internal
For now only disables scene render if all the layers are disabled, but scene
will still be rendered if it's used in compo, has enabled layers which are
not used by compo.
Current pipeline doesn't allow to handle such cases nicely, so leaving it
for later.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 232f9db1c65..679a703ae92 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -237,6 +237,17 @@ static int render_scene_needs_vector(Render *re) return 0; } +static bool render_scene_has_layers_to_render(Scene *scene) +{ + SceneRenderLayer *srl; + for (srl = scene->r.layers.first; srl; srl = srl->next) { + if (!(srl->layflag & SCE_LAY_DISABLE)) { + return true; + } + } + return false; +} + /* *************************************************** */ Render *RE_GetRender(const char *name) @@ -1775,11 +1786,14 @@ static void tag_scenes_for_render(Render *re) if (node->id != (ID *)re->scene) { if ((node->id->flag & LIB_DOIT) == 0) { - node->flag |= NODE_TEST; - node->id->flag |= LIB_DOIT; + Scene *scene = (Scene *) node->id; + if (render_scene_has_layers_to_render(scene)) { + node->flag |= NODE_TEST; + node->id->flag |= LIB_DOIT; #ifdef DEPSGRAPH_WORKAROUND_HACK - tag_dependend_objects_for_render((Scene *) node->id, renderlay); + tag_dependend_objects_for_render(scene, renderlay); #endif + } } } } @@ -2446,7 +2460,6 @@ static int check_composite_output(Scene *scene) bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports) { - SceneRenderLayer *srl; int scemode = check_mode_full_sample(&scene->r); if (scene->r.mode & R_BORDER) { @@ -2521,10 +2534,7 @@ bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList * } /* layer flag tests */ - for (srl = scene->r.layers.first; srl; srl = srl->next) - if (!(srl->layflag & SCE_LAY_DISABLE)) - break; - if (srl == NULL) { + if (!render_scene_has_layers_to_render(scene)) { BKE_report(reports, RPT_ERROR, "All render layers are disabled"); return 0; } |