[Bf-blender-cvs] [0bb0e07e610] blender2.7: Fix Cycles viewport render doing some unnecessary work at the start.

Brecht Van Lommel noreply at git.blender.org
Wed Jan 9 17:18:30 CET 2019


Commit: 0bb0e07e6109fc474b8ff1a1d2422e40bd3bec40
Author: Brecht Van Lommel
Date:   Wed Jan 9 16:57:01 2019 +0100
Branches: blender2.7
https://developer.blender.org/rB0bb0e07e6109fc474b8ff1a1d2422e40bd3bec40

Fix Cycles viewport render doing some unnecessary work at the start.

In some cases it would load adaptive kernels or even start rendering
twice because the first time the scene was not fully synced yet.

===================================================================

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/render/session.cpp

===================================================================

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 30ae0bc813d..dfa92dd1bc7 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -110,9 +110,6 @@ BlenderSession::~BlenderSession()
 void BlenderSession::create()
 {
 	create_session();
-
-	if(b_v3d)
-		session->start();
 }
 
 void BlenderSession::create_session()
@@ -784,7 +781,6 @@ void BlenderSession::synchronize()
 	{
 		free_session();
 		create_session();
-		session->start();
 		return;
 	}
 
@@ -833,6 +829,10 @@ void BlenderSession::synchronize()
 		/* reset time */
 		start_resize_time = 0.0;
 	}
+
+	/* Start rendering thread, if it's not running already. Do this
+	 * after all scene data has been synced at least once. */
+	session->start();
 }
 
 bool BlenderSession::draw(int w, int h)
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index d6d0ffb4a6b..edbf9947b70 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -129,7 +129,9 @@ Session::~Session()
 
 void Session::start()
 {
-	session_thread = new thread(function_bind(&Session::run, this));
+	if (!session_thread) {
+		session_thread = new thread(function_bind(&Session::run, this));
+	}
 }
 
 bool Session::ready_to_reset()
@@ -830,8 +832,10 @@ void Session::set_pause(bool pause_)
 
 void Session::wait()
 {
-	session_thread->join();
-	delete session_thread;
+	if (session_thread) {
+		session_thread->join();
+		delete session_thread;
+	}
 
 	session_thread = NULL;
 }



More information about the Bf-blender-cvs mailing list