diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2014-07-23 01:41:01 +0400 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2014-07-25 18:42:53 +0400 |
commit | fc55c41bba8121bf3db67280c26e840f8b3f4124 (patch) | |
tree | 181abfb43fbbdf84b85206ddc1c2de7635a0dbaf /intern/cycles/blender/blender_session.cpp | |
parent | 2e50b4dc511567a3dfb280e30b5606873fc62d31 (diff) |
Cycles Bake: show progress bar during bake
Baking progress preview is not possible, in parts due to the way the API
was designed. But at least you get to see the progress bar while baking.
Reviewers: sergey
Differential Revision: https://developer.blender.org/D656
Diffstat (limited to 'intern/cycles/blender/blender_session.cpp')
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index 0f31e55d60d..e57a67212f3 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -554,6 +554,8 @@ void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::Bake session->reset(buffer_params, session_params.samples); session->update_scene(); + session->progress.set_update_callback(function_bind(&BlenderSession::update_bake_progress, this)); + scene->bake_manager->bake(scene->device, &scene->dscene, scene, session->progress, shader_type, bake_data, result); /* free all memory used (host and device), so we wouldn't leave render @@ -765,6 +767,26 @@ void BlenderSession::get_progress(float& progress, double& total_time) progress = 0.0; } +void BlenderSession::update_bake_progress() +{ + float progress; + int sample, samples_per_task, parts_total; + + sample = session->progress.get_sample(); + samples_per_task = scene->bake_manager->num_samples; + parts_total = scene->bake_manager->num_parts; + + if(samples_per_task) + progress = ((float)sample / (float)(parts_total * samples_per_task)); + else + progress = 0.0; + + if(progress != last_progress) { + b_engine.update_progress(progress); + last_progress = progress; + } +} + void BlenderSession::update_status_progress() { string timestatus, status, substatus; |