diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-09 18:57:01 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-01-09 19:16:29 +0300 |
commit | 0bb0e07e6109fc474b8ff1a1d2422e40bd3bec40 (patch) | |
tree | 8aa7fc5e3813eda383ae3d6278b5d35190d6a2a4 /intern | |
parent | b7fb3296c101bf408455352ec9784a8870672c81 (diff) |
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.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 8 | ||||
-rw-r--r-- | intern/cycles/render/session.cpp | 10 |
2 files changed, 11 insertions, 7 deletions
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; } |