diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-10-23 21:24:23 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-10-23 21:24:23 +0400 |
commit | 40242c2f4410413c0fef6249208e41f031f1febe (patch) | |
tree | bb043d47a2a6803a40903b7fee000ddd7aa3c204 /intern/cycles/render/session.cpp | |
parent | a32d134dc790f3e8bf064865e4e6c79b55562630 (diff) |
Cycles: update buffers only once in a while when progressive refine is used
It'll mimic the same behavior as regular tile rendering update and it should
give pretty noticeable boost on simpler scenes.
Diffstat (limited to 'intern/cycles/render/session.cpp')
-rw-r--r-- | intern/cycles/render/session.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index aeee119d8cd..c8fdb755544 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -186,6 +186,7 @@ void Session::run_gpu() start_time = time_dt(); reset_time = time_dt(); paused_time = 0.0; + last_update_time = time_dt(); if(!params.background) progress.set_start_time(start_time + paused_time); @@ -447,6 +448,8 @@ void Session::run_cpu() { bool tiles_written = false; + last_update_time = time_dt(); + { /* reset once to start */ thread_scoped_lock reset_lock(delayed_reset.mutex); @@ -807,6 +810,15 @@ void Session::tonemap() bool Session::update_progressive_refine(bool cancel) { int sample = tile_manager.state.sample + 1; + bool write = sample == params.samples || cancel; + + double current_time = time_dt(); + + if (current_time - last_update_time < 1.0f) { + /* if last sample was processed, we need to write buffers anyway */ + if (!write) + return false; + } if(params.progressive_refine) { foreach(RenderBuffers *buffers, tile_buffers) { @@ -814,14 +826,16 @@ bool Session::update_progressive_refine(bool cancel) rtile.buffers = buffers; rtile.sample = sample; - if(rtile.sample == params.samples || cancel) + if(write) write_render_tile_cb(rtile); else update_render_tile_cb(rtile); } } - return sample == params.samples; + last_update_time = current_time; + + return write; } CCL_NAMESPACE_END |