Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_session.cpp
| Show First 20 Lines • Show All 524 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[]) | ||||
| /* get buffer parameters */ | /* get buffer parameters */ | ||||
| SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background); | SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background); | ||||
| BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, width, height); | BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, width, height); | ||||
| scene->bake_manager->set_baking(true); | scene->bake_manager->set_baking(true); | ||||
| /* set number of samples */ | /* set number of samples */ | ||||
| session->tile_manager.set_samples(session_params.samples); | session->tile_manager.set_samples(session_params.samples); | ||||
| /* for progress we assume bake works in one big tile */ | |||||
| session->tile_manager.state.num_tiles = 1; | |||||
| session->reset(buffer_params, session_params.samples); | session->reset(buffer_params, session_params.samples); | ||||
| session->update_scene(); | session->update_scene(); | ||||
| /* find object index. todo: is arbitrary - copied from mesh_displace.cpp */ | /* find object index. todo: is arbitrary - copied from mesh_displace.cpp */ | ||||
| for(size_t i = 0; i < scene->objects.size(); i++) { | for(size_t i = 0; i < scene->objects.size(); i++) { | ||||
| if(strcmp(scene->objects[i]->name.c_str(), b_object.name().c_str()) == 0) { | if(strcmp(scene->objects[i]->name.c_str(), b_object.name().c_str()) == 0) { | ||||
| object_index = i; | object_index = i; | ||||
| tri_offset = scene->objects[i]->mesh->tri_offset; | tri_offset = scene->objects[i]->mesh->tri_offset; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| /* when used, non-instanced convention: object = ~object */ | /* when used, non-instanced convention: object = ~object */ | ||||
| int object = ~object_index; | int object = ~object_index; | ||||
| BakeData *bake_data = scene->bake_manager->init(object, tri_offset, num_pixels); | BakeData *bake_data = scene->bake_manager->init(object, tri_offset, num_pixels); | ||||
| 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(); | ||||
| /* special callback for baking */ | |||||
| session->progress.set_update_callback(function_bind(&BlenderSession::update_status_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 500 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.