forked from bartvdbraak/blender
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.
This commit is contained in:
parent
a32d134dc7
commit
40242c2f44
@ -186,6 +186,7 @@ void Session::run_gpu()
|
|||||||
start_time = time_dt();
|
start_time = time_dt();
|
||||||
reset_time = time_dt();
|
reset_time = time_dt();
|
||||||
paused_time = 0.0;
|
paused_time = 0.0;
|
||||||
|
last_update_time = time_dt();
|
||||||
|
|
||||||
if(!params.background)
|
if(!params.background)
|
||||||
progress.set_start_time(start_time + paused_time);
|
progress.set_start_time(start_time + paused_time);
|
||||||
@ -447,6 +448,8 @@ void Session::run_cpu()
|
|||||||
{
|
{
|
||||||
bool tiles_written = false;
|
bool tiles_written = false;
|
||||||
|
|
||||||
|
last_update_time = time_dt();
|
||||||
|
|
||||||
{
|
{
|
||||||
/* reset once to start */
|
/* reset once to start */
|
||||||
thread_scoped_lock reset_lock(delayed_reset.mutex);
|
thread_scoped_lock reset_lock(delayed_reset.mutex);
|
||||||
@ -807,6 +810,15 @@ void Session::tonemap()
|
|||||||
bool Session::update_progressive_refine(bool cancel)
|
bool Session::update_progressive_refine(bool cancel)
|
||||||
{
|
{
|
||||||
int sample = tile_manager.state.sample + 1;
|
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) {
|
if(params.progressive_refine) {
|
||||||
foreach(RenderBuffers *buffers, tile_buffers) {
|
foreach(RenderBuffers *buffers, tile_buffers) {
|
||||||
@ -814,14 +826,16 @@ bool Session::update_progressive_refine(bool cancel)
|
|||||||
rtile.buffers = buffers;
|
rtile.buffers = buffers;
|
||||||
rtile.sample = sample;
|
rtile.sample = sample;
|
||||||
|
|
||||||
if(rtile.sample == params.samples || cancel)
|
if(write)
|
||||||
write_render_tile_cb(rtile);
|
write_render_tile_cb(rtile);
|
||||||
else
|
else
|
||||||
update_render_tile_cb(rtile);
|
update_render_tile_cb(rtile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sample == params.samples;
|
last_update_time = current_time;
|
||||||
|
|
||||||
|
return write;
|
||||||
}
|
}
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
@ -179,6 +179,7 @@ protected:
|
|||||||
double paused_time;
|
double paused_time;
|
||||||
|
|
||||||
/* progressive refine */
|
/* progressive refine */
|
||||||
|
double last_update_time;
|
||||||
bool update_progressive_refine(bool cancel);
|
bool update_progressive_refine(bool cancel);
|
||||||
|
|
||||||
vector<RenderBuffers *> tile_buffers;
|
vector<RenderBuffers *> tile_buffers;
|
||||||
|
Loading…
Reference in New Issue
Block a user