From 295c37caa406240993ec42bdf698584527950c16 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 15 May 2014 18:21:02 +0200 Subject: 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. --- source/blender/render/intern/source/pipeline.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'source/blender/render') 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; } -- cgit v1.2.3