[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56278] trunk/blender/intern/cycles/ blender: Fix #34714: cycles viewport render would restart when minimizing and unminimizing

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Apr 24 22:12:12 CEST 2013


Revision: 56278
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56278
Author:   blendix
Date:     2013-04-24 20:12:12 +0000 (Wed, 24 Apr 2013)
Log Message:
-----------
Fix #34714: cycles viewport render would restart when minimizing and unminimizing
a maximized Blender window in Ubuntu Unity. The window size would slightly change
as part of the unminimize effect.

Now cycles waits 0.2 seconds before restarting rendering after a viewport resize,
also a bit less flickery when changing the 3d view size in Blender itself.

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

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2013-04-24 19:21:18 UTC (rev 56277)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2013-04-24 20:12:12 UTC (rev 56278)
@@ -50,7 +50,8 @@
 	height = (int)(b_render.resolution_y()*b_render.resolution_percentage()/100);
 
 	background = true;
-	last_redraw_time = 0.0f;
+	last_redraw_time = 0.0;
+	start_resize_time = 0.0;
 
 	create_session();
 }
@@ -66,7 +67,8 @@
 	width = width_;
 	height = height_;
 	background = false;
-	last_redraw_time = 0.0f;
+	last_redraw_time = 0.0;
+	start_resize_time = 0.0;
 
 	create_session();
 	session->start();
@@ -85,6 +87,7 @@
 	/* reset status/progress */
 	last_status = "";
 	last_progress = -1.0f;
+	start_resize_time = 0.0;
 
 	/* create scene */
 	scene = new Scene(scene_params, session_params.device);
@@ -163,6 +166,9 @@
 	session->reset(buffer_params, session_params.samples);
 
 	b_engine.use_highlight_tiles(session_params.progressive_refine == false);
+
+	/* reset time */
+	start_resize_time = 0.0;
 }
 
 void BlenderSession::free_session()
@@ -487,6 +493,9 @@
 	if(scene->need_reset()) {
 		BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 		session->reset(buffer_params, session_params.samples);
+
+		/* reset time */
+		start_resize_time = 0.0;
 	}
 }
 
@@ -497,6 +506,25 @@
 	if(session->ready_to_reset()) {
 		bool reset = false;
 
+		/* if dimensions changed, reset */
+		if(width != w || height != h) {
+			if(start_resize_time == 0.0) {
+				/* don't react immediately to resizes to avoid flickery resizing
+				 * of the viewport, and some window managers changing the window
+				 * size temporarily on unminimize */
+				start_resize_time = time_dt();
+				tag_redraw();
+			}
+			else if(time_dt() - start_resize_time < 0.2f) {
+				tag_redraw();
+			}
+			else {
+				width = w;
+				height = h;
+				reset = true;
+			}
+		}
+
 		/* try to acquire mutex. if we can't, come back later */
 		if(!session->scene->mutex.try_lock()) {
 			tag_update();
@@ -504,7 +532,7 @@
 		else {
 			/* update camera from 3d view */
 
-			sync->sync_view(b_v3d, b_rv3d, w, h);
+			sync->sync_view(b_v3d, b_rv3d, width, height);
 
 			if(scene->camera->need_update)
 				reset = true;
@@ -512,19 +540,14 @@
 			session->scene->mutex.unlock();
 		}
 
-		/* if dimensions changed, reset */
-		if(width != w || height != h) {
-			width = w;
-			height = h;
-			reset = true;
-		}
-
 		/* reset if requested */
 		if(reset) {
 			SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
-			BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, w, h);
+			BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, width, height);
 
 			session->reset(buffer_params, session_params.samples);
+
+			start_resize_time = 0.0;
 		}
 	}
 	else {

Modified: trunk/blender/intern/cycles/blender/blender_session.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.h	2013-04-24 19:21:18 UTC (rev 56277)
+++ trunk/blender/intern/cycles/blender/blender_session.h	2013-04-24 20:12:12 UTC (rev 56278)
@@ -90,6 +90,7 @@
 	float last_progress;
 
 	int width, height;
+	double start_resize_time;
 
 protected:
 	void do_write_update_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay, RenderTile& rtile, bool do_update_only);




More information about the Bf-blender-cvs mailing list