Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/source/external_engine.c5
-rw-r--r--source/blender/render/intern/source/pipeline.c14
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 ******** */