[Bf-blender-cvs] [295c37c] master: Fix T39763: Blender renders disabled Render Layers using Blender Internal

Sergey Sharybin noreply at git.blender.org
Thu May 15 18:22:53 CEST 2014


Commit: 295c37caa406240993ec42bdf698584527950c16
Author: Sergey Sharybin
Date:   Thu May 15 18:21:02 2014 +0200
https://developer.blender.org/rB295c37caa406240993ec42bdf698584527950c16

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.

===================================================================

M	source/blender/render/intern/source/pipeline.c

===================================================================

diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 232f9db..679a703 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;
 	}




More information about the Bf-blender-cvs mailing list