[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51551] trunk/blender/intern/cycles/render : Cycles: update buffers only once in a while when progressive refine is used

Sergey Sharybin sergey.vfx at gmail.com
Tue Oct 23 19:24:24 CEST 2012


Revision: 51551
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51551
Author:   nazgul
Date:     2012-10-23 17:24:23 +0000 (Tue, 23 Oct 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/intern/cycles/render/session.cpp
    trunk/blender/intern/cycles/render/session.h

Modified: trunk/blender/intern/cycles/render/session.cpp
===================================================================
--- trunk/blender/intern/cycles/render/session.cpp	2012-10-23 16:46:13 UTC (rev 51550)
+++ trunk/blender/intern/cycles/render/session.cpp	2012-10-23 17:24:23 UTC (rev 51551)
@@ -186,6 +186,7 @@
 	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 @@
 {
 	bool tiles_written = false;
 
+	last_update_time = time_dt();
+
 	{
 		/* reset once to start */
 		thread_scoped_lock reset_lock(delayed_reset.mutex);
@@ -807,21 +810,32 @@
 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) {
 			RenderTile rtile;
 			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

Modified: trunk/blender/intern/cycles/render/session.h
===================================================================
--- trunk/blender/intern/cycles/render/session.h	2012-10-23 16:46:13 UTC (rev 51550)
+++ trunk/blender/intern/cycles/render/session.h	2012-10-23 17:24:23 UTC (rev 51551)
@@ -179,6 +179,7 @@
 	double paused_time;
 
 	/* progressive refine */
+	double last_update_time;
 	bool update_progressive_refine(bool cancel);
 
 	vector<RenderBuffers *> tile_buffers;




More information about the Bf-blender-cvs mailing list