Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_session.cpp
| Show First 20 Lines • Show All 548 Lines • ▼ Show 20 Lines | void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::BakePixel pixel_array, int num_pixels, int depth, float result[]) | ||||
| populate_bake_data(bake_data, pixel_array, num_pixels); | populate_bake_data(bake_data, pixel_array, num_pixels); | ||||
| /* set number of samples */ | /* set number of samples */ | ||||
| session->tile_manager.set_samples(session_params.samples); | session->tile_manager.set_samples(session_params.samples); | ||||
| session->reset(buffer_params, session_params.samples); | session->reset(buffer_params, session_params.samples); | ||||
| session->update_scene(); | session->update_scene(); | ||||
| session->progress.set_update_callback(function_bind(&BlenderSession::update_bake_progress, this)); | |||||
dfelinto: This is actually not needed, the default update function includes some redraw routine that is… | |||||
| scene->bake_manager->bake(scene->device, &scene->dscene, scene, session->progress, shader_type, bake_data, result); | 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 | /* free all memory used (host and device), so we wouldn't leave render | ||||
| * engine with extra memory allocated | * engine with extra memory allocated | ||||
| */ | */ | ||||
| session->device_free(); | session->device_free(); | ||||
| ▲ Show 20 Lines • Show All 195 Lines • ▼ Show 20 Lines | void BlenderSession::get_progress(float& progress, double& total_time) | ||||
| samples_per_tile = session->tile_manager.num_samples; | samples_per_tile = session->tile_manager.num_samples; | ||||
| if(samples_per_tile && tile_total) | if(samples_per_tile && tile_total) | ||||
| progress = ((float)sample / (float)(tile_total * samples_per_tile)); | progress = ((float)sample / (float)(tile_total * samples_per_tile)); | ||||
| else | else | ||||
| progress = 0.0; | 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; | |||||
| //XXX debug print, to be removed | |||||
| printf("%s - %4.2f [%d / %d]\n", __func__, progress, sample, parts_total * samples_per_task); | |||||
| if(progress != last_progress) { | |||||
| b_engine.update_progress(progress); | |||||
| last_progress = progress; | |||||
| } | |||||
| } | |||||
| void BlenderSession::update_status_progress() | void BlenderSession::update_status_progress() | ||||
| { | { | ||||
| string timestatus, status, substatus; | string timestatus, status, substatus; | ||||
| string scene = ""; | string scene = ""; | ||||
| float progress; | float progress; | ||||
| double total_time, remaining_time = 0; | double total_time, remaining_time = 0; | ||||
| char time_str[128]; | char time_str[128]; | ||||
| float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f; | float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f; | ||||
| ▲ Show 20 Lines • Show All 289 Lines • Show Last 20 Lines | |||||
This is actually not needed, the default update function includes some redraw routine that is not required, but I think it's fine to use it instead of the update_status_progress. So consider this gone in the final patch, unless someone has any consideration on the matter.