[Bf-blender-cvs] [4cfca0a] master: Nicer solution to T38846: Split off the render layer forcing from the validity check for render operator.

Lukas Tönne noreply at git.blender.org
Wed Feb 26 15:03:44 CET 2014


Commit: 4cfca0adfeeadccf0013aaeb8b34315b2d2a8e33
Author: Lukas Tönne
Date:   Wed Feb 26 14:56:27 2014 +0100
https://developer.blender.org/rB4cfca0adfeeadccf0013aaeb8b34315b2d2a8e33

Nicer solution to T38846: Split off the render layer forcing from the
validity check for render operator.

This way scene DNA can stay read-only there, cleaner and we don't have
to pass an awkward bool pointer around.

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

M	source/blender/editors/render/render_internal.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index c922389..a842135 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -799,17 +799,17 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
 	struct Object *camera_override = v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
 	const char *name;
 	ScrArea *sa;
-	bool scene_rlayer_update;
 	
 	/* only one render job at a time */
 	if (WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_RENDER))
 		return OPERATOR_CANCELLED;
 
-	if (!RE_is_rendering_allowed(scene, camera_override, op->reports, &scene_rlayer_update)) {
+	if (RE_force_single_renderlayer(scene))
+		WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+
+	if (!RE_is_rendering_allowed(scene, camera_override, op->reports)) {
 		return OPERATOR_CANCELLED;
 	}
-	if (scene_rlayer_update)
-		WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, NULL);
 
 	if (!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.im_format.imtype)) {
 		BKE_report(op->reports, RPT_ERROR, "Cannot write a single file with an animation format selected");
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index ae0b6f1..8cb49f6 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -285,7 +285,8 @@ void RE_DataBase_GetView(struct Render *re, float mat[4][4]);
 void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]);
 struct Scene *RE_GetScene(struct Render *re);
 
-bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports, bool *r_scene_rlayer_update);
+bool RE_force_single_renderlayer(struct Scene *scene);
+bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports);
 
 bool RE_allow_render_generic_object(struct Object *ob);
 
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index b6f19d6..adb8100 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -2314,6 +2314,20 @@ static void do_render_all_options(Render *re)
 	}
 }
 
+bool RE_force_single_renderlayer(Scene *scene)
+{
+	int scemode = check_mode_full_sample(&scene->r);
+	if (scemode & R_SINGLE_LAYER) {
+		SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+		/* force layer to be enabled */
+		if (srl->layflag & SCE_LAY_DISABLE) {
+			srl->layflag &= ~SCE_LAY_DISABLE;
+			return true;
+		}
+	}
+	return false;
+}
+
 static bool check_valid_compositing_camera(Scene *scene, Object *camera_override)
 {
 	if (scene->r.scemode & R_DOCOMP && scene->use_nodes) {
@@ -2400,12 +2414,10 @@ static int check_composite_output(Scene *scene)
 	return node_tree_has_composite_output(scene->nodetree);
 }
 
-bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports, bool *r_scene_rlayer_update)
+bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports)
 {
 	SceneRenderLayer *srl;
 	int scemode = check_mode_full_sample(&scene->r);
-	if (r_scene_rlayer_update)
-		*r_scene_rlayer_update = false; /* becomes true if render layer is forced enabled */
 	
 	if (scene->r.mode & R_BORDER) {
 		if (scene->r.border.xmax <= scene->r.border.xmin ||
@@ -2477,16 +2489,8 @@ bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *
 		}
 #endif
 	}
-
-	/* layer flag tests */
-	if (scemode & R_SINGLE_LAYER) {
-		srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
-		/* force layer to be enabled */
-		srl->layflag &= ~SCE_LAY_DISABLE;
-		if (r_scene_rlayer_update)
-			*r_scene_rlayer_update = true;
-	}
 	
+	/* layer flag tests */
 	for (srl = scene->r.layers.first; srl; srl = srl->next)
 		if (!(srl->layflag & SCE_LAY_DISABLE))
 			break;




More information about the Bf-blender-cvs mailing list