[Bf-blender-cvs] [bd0b9ed] master: Cycles: Add dedicated Progress::set_error() call

Sergey Sharybin noreply at git.blender.org
Fri Dec 5 18:15:55 CET 2014


Commit: bd0b9ed0c0436cda050f139b9d30bd3d0648d09a
Author: Sergey Sharybin
Date:   Fri Dec 5 21:17:48 2014 +0500
Branches: master
https://developer.blender.org/rBbd0b9ed0c0436cda050f139b9d30bd3d0648d09a

Cycles: Add dedicated Progress::set_error() call

Currently it acts the same as set_cancel(), but this way we're able to
distinguish situations when rendering was aborted by user demand (for
example pressing Esc in standalone renderer) or if something went horribly
wrong (for example out of VRAM error).

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

M	intern/cycles/render/session.cpp
M	intern/cycles/util/util_progress.h

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

diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 9fcd9fa..c03a3dd 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 e721a3f..238fb97 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




More information about the Bf-blender-cvs mailing list