diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index c6f016b7971..4fa87815601 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -76,6 +76,10 @@ void BlenderSession::create_session() SceneParams scene_params = BlenderSync::get_scene_params(b_scene); SessionParams session_params = BlenderSync::get_session_params(b_scene, background); + /* reset status/progress */ + last_status= ""; + last_progress= -1.0f; + /* create scene */ scene = new Scene(scene_params); @@ -264,8 +268,14 @@ void BlenderSession::update_status_progress() if(substatus.size() > 0) status += " | " + substatus; - RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str()); - RE_engine_update_progress((RenderEngine*)b_engine.ptr.data, progress); + if(status != last_status) { + RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str()); + last_status = status; + } + if(progress != last_progress) { + RE_engine_update_progress((RenderEngine*)b_engine.ptr.data, progress); + last_progress = progress; + } } void BlenderSession::tag_update() diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h index 8608ddd2658..e30b60c3d63 100644 --- a/intern/cycles/blender/blender_session.h +++ b/intern/cycles/blender/blender_session.h @@ -70,6 +70,9 @@ public: BL::SpaceView3D b_v3d; BL::RegionView3D b_rv3d; + string last_status; + float last_progress; + int width, height; }; diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index 50f7017bacf..2deb83674cc 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -170,8 +170,10 @@ void Session::run_gpu() if(params.background) { /* if no work left and in background mode, we can stop immediately */ - if(no_tiles) + if(no_tiles) { + progress.set_status("Finished"); break; + } } else { /* if in interactive mode, and we are either paused or done for now, @@ -305,8 +307,10 @@ void Session::run_cpu() if(params.background) { /* if no work left and in background mode, we can stop immediately */ - if(no_tiles) + if(no_tiles) { + progress.set_status("Finished"); break; + } } else { /* if in interactive mode, and we are either paused or done for now,