[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