diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-09-21 16:41:36 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-09-21 16:42:48 +0300 |
commit | 0dbde559cfff511e75ab44e2c3d7efe8321dc309 (patch) | |
tree | e04dbb454c0ef1a91bb967a79e6a2d7e81a5e208 /source/blender | |
parent | 7b9bd5b54622eaad122973595ee6cea18dcd13a9 (diff) |
Render: Free persistent image storage when loading new file
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 1 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 4 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 11 |
3 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 0923ac7e743..9aad3cf564b 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 2a679f0f0d0..fd56c47c309 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 46fb0603038..98279da13bd 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) { |