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:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-10-23 21:24:23 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-10-23 21:24:23 +0400
commit40242c2f4410413c0fef6249208e41f031f1febe (patch)
treebb043d47a2a6803a40903b7fee000ddd7aa3c204 /intern/cycles/render/session.cpp
parenta32d134dc790f3e8bf064865e4e6c79b55562630 (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.cpp18
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