diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-11-10 03:54:58 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-11-10 03:54:58 +0400 |
commit | 7d03e5c615a71fea9223d4fa4fb3bf4e98190c8c (patch) | |
tree | 01185f99ff6e3cfbaa2a6e4f968809f645daf1bb /source/blender/render | |
parent | 5a29885007c66752adbdcd62cdac5e7749f083fd (diff) |
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.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 5 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 14 |
3 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 984b1a8e651..ecdd1774221 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -170,6 +170,8 @@ void RE_FreeRender (struct Render *re); 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); diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index 736cb5de7c3..d771cf2253d 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -382,6 +382,11 @@ int RE_engine_render(Render *re, int do_all) 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); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 369818d37d5..3797430952c 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -244,6 +244,7 @@ Render *RE_GetRender(const char *name) return re; } + /* if you want to know exactly what has been done */ RenderResult *RE_AcquireResultRead(Render *re) { @@ -424,6 +425,19 @@ void RE_FreeAllRenderResults(void) } } +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 ******** */ |