[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52054] trunk/blender: Fix part of #33132: render resoltuion refresh issues after persistent images

Brecht Van Lommel brechtvanlommel at pandora.be
Sat Nov 10 00:54:59 CET 2012


Revision: 52054
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52054
Author:   blendix
Date:     2012-11-09 23:54:58 +0000 (Fri, 09 Nov 2012)
Log Message:
-----------
Fix part of #33132: render resoltuion refresh issues after persistent images
was added for cycles.

This fixes the case where the option is disabled. I moved the option now to
Blender itself and made it keep the engine around only when it's enabled. Also
fixes case where there could be issues when switching to another renderer.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/addon/properties.py
    trunk/blender/intern/cycles/blender/addon/ui.py
    trunk/blender/intern/cycles/blender/blender_sync.cpp
    trunk/blender/source/blender/editors/render/render_update.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/external_engine.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/intern/cycles/blender/addon/properties.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/properties.py	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/intern/cycles/blender/addon/properties.py	2012-11-09 23:54:58 UTC (rev 52054)
@@ -297,12 +297,6 @@
                 default=False,
                 )
 
-        cls.use_persistent_images = BoolProperty(
-                name="Persistent Images",
-                description="Keep images loaded on the device so they could be reused by next render",
-                default=False,
-                )
-
     @classmethod
     def unregister(cls):
         del bpy.types.Scene.cycles

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2012-11-09 23:54:58 UTC (rev 52054)
@@ -218,7 +218,7 @@
 
         sub = col.column(align=True)
         sub.label(text="Final Render:")
-        sub.prop(cscene, "use_persistent_images")
+        sub.prop(rd, "use_persistent_data", text="Persistent Images")
 
 
 class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):

Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp	2012-11-09 23:54:58 UTC (rev 52054)
@@ -284,6 +284,7 @@
 
 SceneParams BlenderSync::get_scene_params(BL::Scene b_scene, bool background)
 {
+	BL::RenderSettings r = b_scene.render();
 	SceneParams params;
 	PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
 	int shadingsystem = RNA_enum_get(&cscene, "shading_system");
@@ -301,7 +302,7 @@
 	params.use_bvh_spatial_split = RNA_boolean_get(&cscene, "debug_use_spatial_splits");
 	params.use_bvh_cache = (background)? RNA_boolean_get(&cscene, "use_cache"): false;
 
-	params.persistent_images = (background)? RNA_boolean_get(&cscene, "use_persistent_images"): false;
+	params.persistent_images = (background)? r.use_persistent_data(): false;
 
 	return params;
 }

Modified: trunk/blender/source/blender/editors/render/render_update.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_update.c	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/source/blender/editors/render/render_update.c	2012-11-09 23:54:58 UTC (rev 52054)
@@ -58,6 +58,7 @@
 #include "GPU_material.h"
 
 #include "RE_engine.h"
+#include "RE_pipeline.h"
 
 #include "ED_node.h"
 #include "ED_render.h"
@@ -157,6 +158,8 @@
 	for (sc = bmain->screen.first; sc; sc = sc->id.next)
 		for (sa = sc->areabase.first; sa; sa = sa->next)
 			ED_render_engine_area_exit(sa);
+
+	RE_FreePersistentData();
 }
 
 /***************************** Updates ***********************************

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2012-11-09 23:54:58 UTC (rev 52054)
@@ -1187,11 +1187,12 @@
 		/* Use the same flag for autothreads */
 #define R_FIXED_THREADS		0x80000 
 
-#define R_SPEED			0x100000
-#define R_SSS			0x200000
-#define R_NO_OVERWRITE	0x400000 /* skip existing files */
-#define R_TOUCH			0x800000 /* touch files before rendering */
-#define R_SIMPLIFY		0x1000000
+#define R_SPEED				0x100000
+#define R_SSS				0x200000
+#define R_NO_OVERWRITE		0x400000  /* skip existing files */
+#define R_TOUCH				0x800000  /* touch files before rendering */
+#define R_SIMPLIFY			0x1000000
+#define R_PERSISTENT_DATA	0x2000000 /* keep data around for re-render */
 
 /* seq_flag */
 #define R_SEQ_GL_PREV 1

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-11-09 23:54:58 UTC (rev 52054)
@@ -1254,6 +1254,12 @@
 		rna_Scene_use_simplify_update(bmain, scene, ptr);
 }
 
+static void rna_Scene_use_persistent_data_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(ptr))
+{
+	if (!(scene->r.mode & R_PERSISTENT_DATA))
+		RE_FreePersistentData();
+}
+
 static int rna_Scene_use_audio_get(PointerRNA *ptr)
 {
 	Scene *scene = (Scene *)ptr->data;
@@ -4036,6 +4042,12 @@
 	RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", R_SIMPLE_NO_TRIANGULATE);
 	RNA_def_property_ui_text(prop, "Skip Quad to Triangles", "Disable non-planar quads being triangulated");
 
+	/* persistent data */
+	prop = RNA_def_property(srna, "use_persistent_data", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "mode", R_PERSISTENT_DATA);
+	RNA_def_property_ui_text(prop, "Persistent Data", "Keep render data around for faster re-renders");
+	RNA_def_property_update(prop, 0, "rna_Scene_use_persistent_data_update");
+
 	/* Scene API */
 	RNA_api_scene_render(srna);
 }

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2012-11-09 23:54:58 UTC (rev 52054)
@@ -170,6 +170,8 @@
 void RE_FreeAllRender (void);
 /* only call on file load */
 void RE_FreeAllRenderResults(void);
+/* for external render engines that can keep persistent data */
+void RE_FreePersistentData(void);
 
 /* get results and statistics */
 void RE_FreeRenderResult(struct RenderResult *rr);

Modified: trunk/blender/source/blender/render/intern/source/external_engine.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/external_engine.c	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/source/blender/render/intern/source/external_engine.c	2012-11-09 23:54:58 UTC (rev 52054)
@@ -382,6 +382,11 @@
 	if (type->render)
 		type->render(engine, re->scene);
 
+	if(!(re->r.mode & R_PERSISTENT_DATA)) {
+		RE_engine_free(re->engine);
+		re->engine = NULL;
+	}
+
 	if (re->result->do_exr_tile) {
 		BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 		render_result_exr_file_end(re);

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2012-11-09 23:47:06 UTC (rev 52053)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2012-11-09 23:54:58 UTC (rev 52054)
@@ -244,6 +244,7 @@
 	return re;
 }
 
+
 /* if you want to know exactly what has been done */
 RenderResult *RE_AcquireResultRead(Render *re)
 {
@@ -424,6 +425,19 @@
 	}
 }
 
+void RE_FreePersistentData()
+{
+	Render *re;
+
+	/* render engines can be kept around for quick re-render, this clears all */
+	for (re = RenderGlobal.renderlist.first; re; re = re->next) {
+		if (re->engine) {
+			RE_engine_free(re);
+			re->engine = NULL;
+		}
+	}
+}
+
 /* ********* initialize state ******** */
 
 




More information about the Bf-blender-cvs mailing list