[Bf-blender-cvs] [a457ad0] blender-v2.76-release: Render: Free persistent image storage when loading new file

Sergey Sharybin noreply at git.blender.org
Wed Sep 23 16:12:10 CEST 2015


Commit: a457ad00572c378787ac89f7f2fb525805ddcba1
Author: Sergey Sharybin
Date:   Mon Sep 21 18:41:36 2015 +0500
Branches: blender-v2.76-release
https://developer.blender.org/rBa457ad00572c378787ac89f7f2fb525805ddcba1

Render: Free persistent image storage when loading new file

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

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

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

diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 0923ac7..9aad3cf 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -417,6 +417,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, const char *filepath
 	BKE_scene_set_background(G.main, curscene);
 
 	if (mode != LOAD_UNDO) {
+		RE_FreeAllPersistentData();
 		IMB_colormanagement_check_file_config(G.main);
 	}
 
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 2a679f0..fd56c47 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -207,6 +207,10 @@ void RE_InitRenderCB(struct Render *re);
 void RE_FreeRender(struct Render *re);
 /* only called on exit */
 void RE_FreeAllRender(void);
+/* Free memory used by persistent data.
+ * Invoked when loading new file.
+ */
+void RE_FreeAllPersistentData(void);
 /* only call on file load */
 void RE_FreeAllRenderResults(void);
 /* for external render engines that can keep persistent data */
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 46fb060..98279da 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -533,6 +533,17 @@ void RE_FreeAllRender(void)
 #endif
 }
 
+void RE_FreeAllPersistentData(void)
+{
+	Render *re;
+	for (re = RenderGlobal.renderlist.first; re != NULL; re = re->next) {
+		if ((re->r.mode & R_PERSISTENT_DATA) != 0 && re->engine != NULL) {
+			RE_engine_free(re->engine);
+			re->engine = NULL;
+		}
+	}
+}
+
 /* on file load, free all re */
 void RE_FreeAllRenderResults(void)
 {




More information about the Bf-blender-cvs mailing list