[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58174] trunk/blender: Fix #36091: external render engines like Luxrender don't work well with the save

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Jul 11 14:22:30 CEST 2013


Revision: 58174
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58174
Author:   blendix
Date:     2013-07-11 12:22:29 +0000 (Thu, 11 Jul 2013)
Log Message:
-----------
Fix #36091: external render engines like Luxrender don't work well with the save
buffers option, it requires specific tile sizes and if they don't match what
OpenEXR expects file saving can get stuck.

Now I've made support for his optional, with a bl_use_save_buffers property for
RenderEngine, set to False by default.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/addon/__init__.py
    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-07-11 11:38:28 UTC (rev 58173)
+++ trunk/blender/intern/cycles/blender/addon/__init__.py	2013-07-11 12:22:29 UTC (rev 58174)
@@ -41,6 +41,7 @@
     bl_use_shading_nodes = True
     bl_use_preview = True
     bl_use_exclude_layers = True
+    bl_use_save_buffers = True
 
     def __init__(self):
         self.session = None

Modified: trunk/blender/source/blender/makesrna/intern/rna_render.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_render.c	2013-07-11 11:38:28 UTC (rev 58173)
+++ trunk/blender/source/blender/makesrna/intern/rna_render.c	2013-07-11 12:22:29 UTC (rev 58174)
@@ -456,6 +456,10 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_EXCLUDE_LAYERS);
 	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
 
+	prop = RNA_def_property(srna, "bl_use_save_buffers", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SAVE_BUFFERS);
+	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-07-11 11:38:28 UTC (rev 58173)
+++ trunk/blender/source/blender/render/extern/include/RE_engine.h	2013-07-11 12:22:29 UTC (rev 58174)
@@ -57,6 +57,7 @@
 #define RE_USE_POSTPROCESS		8
 #define RE_USE_SHADING_NODES	16
 #define RE_USE_EXCLUDE_LAYERS	32
+#define RE_USE_SAVE_BUFFERS		64
 
 /* 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-07-11 11:38:28 UTC (rev 58173)
+++ trunk/blender/source/blender/render/intern/source/external_engine.c	2013-07-11 12:22:29 UTC (rev 58174)
@@ -253,8 +253,14 @@
 		/* for exr tile render, detect tiles that are done */
 		RenderPart *pa = get_part_from_result(re, result);
 
-		if (pa)
+		if (pa) {
 			pa->status = PART_STATUS_READY;
+		}
+		else if (re->result->do_exr_tile) {
+			/* if written result does not match any tile and we are using save
+			 * buffers, we are going to get openexr save errors */
+			fprintf(stderr, "RenderEngine.end_result: dimensions do not match any OpenEXR tile.\n");
+		}
 
 		if (re->result->do_exr_tile)
 			render_result_exr_file_merge(re->result, result);
@@ -438,12 +444,13 @@
 	/* create render result */
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 	if (re->result == NULL || !(re->r.scemode & R_BUTS_PREVIEW)) {
-		int savebuffers;
+		int savebuffers = RR_USE_MEM;
 
 		if (re->result)
 			render_result_free(re->result);
 
-		savebuffers = (re->r.scemode & R_EXR_TILE_FILE) ? RR_USE_EXR : RR_USE_MEM;
+		if ((type->flag & RE_USE_SAVE_BUFFERS) && (re->r.scemode & R_EXR_TILE_FILE))
+			savebuffers = RR_USE_EXR;
 		re->result = render_result_new(re, &re->disprect, 0, savebuffers, RR_ALL_LAYERS);
 	}
 	BLI_rw_mutex_unlock(&re->resultmutex);




More information about the Bf-blender-cvs mailing list