From 0bb0e07e6109fc474b8ff1a1d2422e40bd3bec40 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 9 Jan 2019 16:57:01 +0100 Subject: [PATCH] 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. --- intern/cycles/blender/blender_session.cpp | 8 ++++---- 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; }