diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-08-22 17:17:43 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-08-22 17:17:43 +0400 |
commit | 9ccc60ed8c22ad7ce886273832dd885af3c2347d (patch) | |
tree | 7bd921e04cb8a39286f57d058836c88a8c10fc4a /intern/cycles | |
parent | f7b9c85871ad4e68dbd578556f3ae8ef55d6dc98 (diff) |
Cycles:
* Update progress bar during render (patch by Thomas)
* Show status/pass/time during render in 3d view
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/addon/engine.py | 36 | ||||
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 35 | ||||
-rw-r--r-- | intern/cycles/blender/blender_session.h | 1 | ||||
-rw-r--r-- | intern/cycles/blender/blender_util.h | 2 |
4 files changed, 32 insertions, 42 deletions
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py index 6879efcb24e..d25eb21eeb9 100644 --- a/intern/cycles/blender/addon/engine.py +++ b/intern/cycles/blender/addon/engine.py @@ -58,41 +58,7 @@ def draw(engine, region, v3d, rv3d): rv3d = rv3d.as_pointer() # draw render image - status, substatus = lib.draw(engine.session, v3d, rv3d) - - # draw text over image - if status != "": - import blf - import bgl - - fontid = 0 # todo, find out how to set this - dim = blf.dimensions(fontid, status) - dim_sub = blf.dimensions(fontid, substatus) - - padding = 5 - - x = (region.width - max(dim[0], dim_sub[0]))*0.5 - padding - y = (region.height - (dim[1] + dim_sub[1] + padding))*0.5 - padding - - bgl.glColor4f(0.0, 0.0, 0.0, 0.5) - bgl.glEnable(bgl.GL_BLEND) - bgl.glBlendFunc(bgl.GL_SRC_ALPHA, bgl.GL_ONE_MINUS_SRC_ALPHA) - bgl.glRectf(x, y, x+max(dim[0], dim_sub[0])+padding+padding, y+dim[1]+dim_sub[1]+padding+padding+2) - bgl.glDisable(bgl.GL_BLEND) - - x = (region.width - dim[0])*0.5 - y = (region.height - (dim[1] + dim_sub[1] + padding))*0.5 + dim_sub[1] + padding - - bgl.glColor3f(0.8, 0.8, 0.8) - blf.position(fontid, x, y, 0) - blf.draw(fontid, status) - - x = (region.width - dim_sub[0])*0.5 - y = (region.height - (dim[1] + dim_sub[1] + padding))*0.5 - - bgl.glColor3f(0.6, 0.6, 0.6) - blf.position(fontid, x, y, 0) - blf.draw(fontid, substatus) + lib.draw(engine.session, v3d, rv3d) def available_devices(): import libcycles_blender as lib diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index f69ebff5338..045efef0ef0 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -243,6 +243,15 @@ void BlenderSession::get_status(string& status, string& substatus) session->progress.get_status(status, substatus); } +void BlenderSession::get_progress(float& progress, double& total_time) +{ + double pass_time; + int pass; + + session->progress.get_pass(pass, total_time, pass_time); + progress = ((float)pass/(float)session->params.passes); +} + void BlenderSession::tag_update() { /* tell blender that we want to get another update callback */ @@ -251,16 +260,28 @@ void BlenderSession::tag_update() void BlenderSession::tag_redraw() { - if(background) { - /* offline render, set stats and redraw if timeout passed */ - string status, substatus; - get_status(status, substatus); + string status, substatus; + float progress; + double total_time; + char time_str[128]; + + /* update stats and progress */ + get_status(status, substatus); + get_progress(progress, total_time); + + if(!background) { + BLI_timestr(total_time, time_str); + status = "Time: " + string(time_str) + " | " + status; + } - if(substatus.size() > 0) - status += " | " + substatus; + if(substatus.size() > 0) + status += " | " + substatus; - RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str()); + RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str()); + RE_engine_update_progress((RenderEngine*)b_engine.ptr.data, progress); + if(background) { + /* offline render, redraw if timeout passed */ if(time_dt() - last_redraw_time > 1.0f) { write_render_result(); engine_tag_redraw((RenderEngine*)b_engine.ptr.data); diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h index 8bc5d3dfab9..ea3e005a884 100644 --- a/intern/cycles/blender/blender_session.h +++ b/intern/cycles/blender/blender_session.h @@ -55,6 +55,7 @@ public: void tag_redraw(); void tag_update(); void get_status(string& status, string& substatus); + void get_progress(float& progress, double& total_time); void test_cancel(); bool background; diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index 354a195758f..fe9a611e2f8 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -44,9 +44,11 @@ void RE_engine_update_result(struct RenderEngine *engine, struct RenderResult *r void RE_engine_end_result(struct RenderEngine *engine, struct RenderResult *result); int RE_engine_test_break(struct RenderEngine *engine); void RE_engine_update_stats(struct RenderEngine *engine, const char *stats, const char *info); +void RE_engine_update_progress(struct RenderEngine *engine, float progress); void engine_tag_redraw(void *engine); void engine_tag_update(void *engine); int rna_Object_is_modified(void *ob, void *scene, int settings); +void BLI_timestr(double _time, char *str); } |