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:
authorJason Wilkins <Jason.A.Wilkins@gmail.com>2012-11-12 16:30:02 +0400
committerJason Wilkins <Jason.A.Wilkins@gmail.com>2012-11-12 16:30:02 +0400
commit6b65102c20e9bdafd90f55f60c2a2084d873e809 (patch)
treea0f5554702501d2da1073b22ff55f740aff135f9 /source/blender/render/intern/source/external_engine.c
parent053710fcbc78ff83b9617be87558876e381f85a6 (diff)
parent83de5cb30831328548502126dff84ffdb72544f2 (diff)
Merge w/ trunk: r51141-52085 (Important Note: gameengine and blenderplayer were not merged due to complex differences)
Diffstat (limited to 'source/blender/render/intern/source/external_engine.c')
-rw-r--r--source/blender/render/intern/source/external_engine.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index 636b3205b23..d771cf2253d 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -64,7 +64,7 @@
static RenderEngineType internal_render_type = {
NULL, NULL,
"BLENDER_RENDER", N_("Blender Render"), RE_INTERNAL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
{NULL, NULL, NULL}
};
@@ -73,7 +73,7 @@ static RenderEngineType internal_render_type = {
static RenderEngineType internal_game_type = {
NULL, NULL,
"BLENDER_GAME", N_("Blender Game"), RE_INTERNAL | RE_GAME,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
{NULL, NULL, NULL}
};
@@ -138,7 +138,7 @@ void RE_engine_free(RenderEngine *engine)
{
#ifdef WITH_PYTHON
if (engine->py_instance) {
- BPY_DECREF(engine->py_instance);
+ BPY_DECREF_RNA_INVALIDATE(engine->py_instance);
}
#endif
@@ -290,9 +290,24 @@ void RE_engine_update_progress(RenderEngine *engine, float progress)
}
}
+void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float mem_peak)
+{
+ Render *re = engine->re;
+
+ if (re) {
+ re->i.mem_used = mem_used;
+ re->i.mem_peak = mem_peak;
+ }
+}
+
void RE_engine_report(RenderEngine *engine, int type, const char *msg)
{
- BKE_report(engine->re->reports, type, msg);
+ Render *re = engine->re;
+
+ if (re)
+ BKE_report(engine->re->reports, type, msg);
+ else if (engine->reports)
+ BKE_report(engine->reports, type, msg);
}
/* Render */
@@ -334,7 +349,12 @@ int RE_engine_render(Render *re, int do_all)
re->i.totface = re->i.totvert = re->i.totstrand = re->i.totlamp = re->i.tothalo = 0;
/* render */
- engine = RE_engine_create(type);
+ if(!re->engine)
+ re->engine = RE_engine_create(type);
+
+ engine = re->engine;
+
+ /* TODO: actually link to a parent which shouldn't happen */
engine->re = re;
if (re->flag & R_ANIMATION)
@@ -362,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);
@@ -374,8 +399,6 @@ int RE_engine_render(Render *re, int do_all)
render_result_free_list(&engine->fullresult, engine->fullresult.first);
- RE_engine_free(engine);
-
if (BKE_reports_contain(re->reports, RPT_ERROR))
G.is_break = TRUE;