diff options
-rw-r--r-- | intern/cycles/render/session.cpp | 12 | ||||
-rw-r--r-- | intern/cycles/util/util_progress.h | 29 |
2 files changed, 35 insertions, 6 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index 9fcd9fa85f5..c03a3dd081d 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -251,7 +251,7 @@ void Session::run_gpu() update_scene(); if(!device->error_message().empty()) - progress.set_cancel(device->error_message()); + progress.set_error(device->error_message()); if(progress.get_cancel()) break; @@ -292,7 +292,7 @@ void Session::run_gpu() } if(!device->error_message().empty()) - progress.set_cancel(device->error_message()); + progress.set_error(device->error_message()); tiles_written = update_progressive_refine(progress.get_cancel()); @@ -540,7 +540,7 @@ void Session::run_cpu() update_scene(); if(!device->error_message().empty()) - progress.set_cancel(device->error_message()); + progress.set_error(device->error_message()); if(progress.get_cancel()) break; @@ -558,7 +558,7 @@ void Session::run_cpu() need_tonemap = true; if(!device->error_message().empty()) - progress.set_cancel(device->error_message()); + progress.set_error(device->error_message()); } device->task_wait(); @@ -580,7 +580,7 @@ void Session::run_cpu() } if(!device->error_message().empty()) - progress.set_cancel(device->error_message()); + progress.set_error(device->error_message()); tiles_written = update_progressive_refine(progress.get_cancel()); } @@ -604,7 +604,7 @@ void Session::load_kernels() if(message.empty()) message = "Failed loading render kernel, see console for errors"; - progress.set_cancel(message); + progress.set_error(message); progress.set_status("Error", message); progress.set_update(); return; diff --git a/intern/cycles/util/util_progress.h b/intern/cycles/util/util_progress.h index e721a3f5047..238fb976778 100644 --- a/intern/cycles/util/util_progress.h +++ b/intern/cycles/util/util_progress.h @@ -46,6 +46,8 @@ public: update_cb = NULL; cancel = false; cancel_message = ""; + error = false; + error_message = ""; cancel_cb = NULL; } @@ -79,6 +81,8 @@ public: sync_substatus = ""; cancel = false; cancel_message = ""; + error = false; + error_message = ""; } /* cancel */ @@ -108,6 +112,28 @@ public: cancel_cb = function; } + /* error */ + void set_error(const string& error_message_) + { + thread_scoped_lock lock(progress_mutex); + error_message = error_message_; + error = true; + /* If error happens we also stop rendering. */ + cancel_message = error_message_; + cancel = true; + } + + bool get_error() + { + return error; + } + + string get_error_message() + { + thread_scoped_lock lock(progress_mutex); + return error_message; + } + /* tile and timing information */ void set_start_time(double start_time_) @@ -259,6 +285,9 @@ protected: volatile bool cancel; string cancel_message; + + volatile bool error; + string error_message; }; CCL_NAMESPACE_END |