[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57352] trunk/blender: Fix #35681: cycles excluded layers still got evaluated before and after

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Jun 10 15:53:38 CEST 2013


Revision: 57352
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57352
Author:   blendix
Date:     2013-06-10 13:53:38 +0000 (Mon, 10 Jun 2013)
Log Message:
-----------
Fix #35681: cycles excluded layers still got evaluated before and after
rendering even if they were not used on any render layers.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/addon/__init__.py
    trunk/blender/source/blender/editors/render/render_internal.c
    trunk/blender/source/blender/makesrna/intern/rna_render.c
    trunk/blender/source/blender/render/extern/include/RE_engine.h
    trunk/blender/source/blender/render/intern/source/external_engine.c

Modified: trunk/blender/intern/cycles/blender/addon/__init__.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/__init__.py	2013-06-10 13:07:02 UTC (rev 57351)
+++ trunk/blender/intern/cycles/blender/addon/__init__.py	2013-06-10 13:53:38 UTC (rev 57352)
@@ -40,6 +40,7 @@
     bl_label = "Cycles Render"
     bl_use_shading_nodes = True
     bl_use_preview = True
+    bl_use_exclude_layers = True
 
     def __init__(self):
         self.session = None

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2013-06-10 13:07:02 UTC (rev 57351)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2013-06-10 13:53:38 UTC (rev 57352)
@@ -422,7 +422,7 @@
 		free_main(rj->main);
 
 	/* else the frame will not update for the original value */
-	if (!(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) {
+	if (rj->anim && !(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) {
 		/* possible this fails of loading new file while rendering */
 		if (G.main->wm.first) {
 			ED_update_for_newframe(G.main, rj->scene, 1);

Modified: trunk/blender/source/blender/makesrna/intern/rna_render.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_render.c	2013-06-10 13:07:02 UTC (rev 57351)
+++ trunk/blender/source/blender/makesrna/intern/rna_render.c	2013-06-10 13:53:38 UTC (rev 57352)
@@ -452,6 +452,10 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SHADING_NODES);
 	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
 
+	prop = RNA_def_property(srna, "bl_use_exclude_layers", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_EXCLUDE_LAYERS);
+	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+
 	RNA_define_verify_sdna(1);
 }
 

Modified: trunk/blender/source/blender/render/extern/include/RE_engine.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_engine.h	2013-06-10 13:07:02 UTC (rev 57351)
+++ trunk/blender/source/blender/render/extern/include/RE_engine.h	2013-06-10 13:53:38 UTC (rev 57352)
@@ -56,6 +56,7 @@
 #define RE_USE_PREVIEW			4
 #define RE_USE_POSTPROCESS		8
 #define RE_USE_SHADING_NODES	16
+#define RE_USE_EXCLUDE_LAYERS	32
 
 /* RenderEngine.flag */
 #define RE_ENGINE_ANIMATION		1

Modified: trunk/blender/source/blender/render/intern/source/external_engine.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/external_engine.c	2013-06-10 13:07:02 UTC (rev 57351)
+++ trunk/blender/source/blender/render/intern/source/external_engine.c	2013-06-10 13:53:38 UTC (rev 57352)
@@ -410,9 +410,31 @@
 
 	/* update animation here so any render layer animation is applied before
 	 * creating the render result */
-	if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0)
-		BKE_scene_update_for_newframe(re->main, re->scene, re->lay);
+	if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) {
+		unsigned int lay = re->lay;
 
+		/* don't update layers excluded on all render layers */
+		if (type->flag & RE_USE_EXCLUDE_LAYERS) {
+			SceneRenderLayer *srl;
+			unsigned int non_excluded_lay = 0;
+
+			if (re->r.scemode & R_SINGLE_LAYER) {
+				srl = BLI_findlink(&re->r.layers, re->r.actlay);
+				if (srl)
+					non_excluded_lay |= ~srl->lay_exclude;
+			}
+			else {
+				for (srl = re->r.layers.first; srl; srl = srl->next)
+					if (!(srl->layflag & SCE_LAY_DISABLE))
+						non_excluded_lay |= ~srl->lay_exclude;
+			}
+
+			lay &= non_excluded_lay;
+		}
+
+		BKE_scene_update_for_newframe(re->main, re->scene, lay);
+	}
+
 	/* create render result */
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 	if (re->result == NULL || !(re->r.scemode & R_BUTS_PREVIEW)) {




More information about the Bf-blender-cvs mailing list