Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_session.cpp
| Show First 20 Lines • Show All 443 Lines • ▼ Show 20 Lines | void BlenderSession::render(BL::Depsgraph& b_depsgraph_) | ||||
| session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca"); | session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca"); | ||||
| scene->film->pass_alpha_threshold = b_view_layer.pass_alpha_threshold(); | scene->film->pass_alpha_threshold = b_view_layer.pass_alpha_threshold(); | ||||
| scene->film->tag_passes_update(scene, passes); | scene->film->tag_passes_update(scene, passes); | ||||
| scene->film->tag_update(scene); | scene->film->tag_update(scene); | ||||
| scene->integrator->tag_update(scene); | scene->integrator->tag_update(scene); | ||||
| BL::RenderResult::views_iterator b_view_iter; | BL::RenderResult::views_iterator b_view_iter; | ||||
| vector<Camera*> camera_array; | |||||
| vector<Camera*> dicing_camera_array; | |||||
sergey: Missing spaces? | |||||
| Camera *camera_original = scene->camera; | |||||
| Camera *dicing_camera_original = scene->dicing_camera; | |||||
| BL::Object b_camera_override(b_engine.camera_override()); | |||||
| int view_index = 0; | int view_index = 0; | ||||
| for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) { | for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) { | ||||
| b_rview_name = b_view_iter->name(); | b_rview_name = b_view_iter->name(); | ||||
| /* set the current view */ | |||||
| b_engine.active_view_set(b_rview_name.c_str()); | |||||
| /* update scene */ | /* update scene */ | ||||
| BL::Object b_camera_override(b_engine.camera_override()); | |||||
| sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str()); | sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str()); | ||||
| Camera *scene_camera = new Camera(*scene->camera); | |||||
| camera_array.push_back(scene_camera); | |||||
| Camera *dicing_camera; | |||||
| if (scene->camera == scene->dicing_camera) { | |||||
| dicing_camera = scene_camera; | |||||
| } | |||||
| else { | |||||
| dicing_camera = new Camera(*scene->dicing_camera); | |||||
| } | |||||
| dicing_camera_array.push_back(dicing_camera); | |||||
| } | |||||
| sync->sync_data(b_render, | sync->sync_data(b_render, | ||||
| b_depsgraph, | b_depsgraph, | ||||
| b_v3d, | b_v3d, | ||||
| b_camera_override, | b_camera_override, | ||||
| width, height, | width, height, | ||||
| &python_thread_state); | &python_thread_state); | ||||
| builtin_images_load(); | builtin_images_load(); | ||||
| /* Attempt to free all data which is held by Blender side, since at this | /* Attempt to free all data which is held by Blender side, since at this | ||||
| * point we knwo that we've got everything to render current view layer. | * point we know that we've got everything to render current view layer. | ||||
| */ | */ | ||||
| free_blender_memory_if_possible(); | free_blender_memory_if_possible(); | ||||
Not Done Inline ActionsComment is a sentence, starting with a capital and ending with a full stop. sergey: Comment is a sentence, starting with a capital and ending with a full stop. | |||||
| view_index = 0; | |||||
| for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) { | |||||
| scene->camera = camera_array[view_index]; | |||||
| scene->dicing_camera = dicing_camera_array[view_index]; | |||||
| b_rview_name = b_view_iter->name(); | |||||
| /* Set the current view. */ | |||||
| b_engine.active_view_set(b_rview_name.c_str()); | |||||
Not Done Inline ActionsI'm not sure how this works. Scene's camera is never re-allocated, so you're storing same pointer every time? And later one we'll have a double-free because scene still owns the pointer? sergey: I'm not sure how this works.
Scene's camera is never re-allocated, so you're storing same… | |||||
| /* Make sure all views have different noise patterns. - hardcoded value just to make it random */ | /* Make sure all views have different noise patterns. - hardcoded value just to make it random */ | ||||
| if(view_index != 0) { | if(view_index != 0) { | ||||
| scene->integrator->seed += hash_int_2d(scene->integrator->seed, hash_int(view_index * 0xdeadbeef)); | scene->integrator->seed += hash_int_2d(scene->integrator->seed, hash_int(view_index * 0xdeadbeef)); | ||||
| scene->integrator->tag_update(scene); | scene->integrator->tag_update(scene); | ||||
| } | } | ||||
| /* Update number of samples per layer. */ | /* Update number of samples per layer. */ | ||||
| int samples = sync->get_layer_samples(); | int samples = sync->get_layer_samples(); | ||||
| Show All 20 Lines | if(!b_engine.is_preview() && background && print_render_stats) { | ||||
| session->collect_statistics(&stats); | session->collect_statistics(&stats); | ||||
| printf("Render statistics:\n%s\n", stats.full_report().c_str()); | printf("Render statistics:\n%s\n", stats.full_report().c_str()); | ||||
| } | } | ||||
| if(session->progress.get_cancel()) | if(session->progress.get_cancel()) | ||||
| break; | break; | ||||
| } | } | ||||
| view_index = 0; | |||||
| for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) { | |||||
Not Done Inline ActionsMaybe i'm missing something, but i don't think delete works for vector. sergey: Maybe i'm missing something, but i don't think `delete` works for `vector`. | |||||
| const bool cameras_are_different = camera_array[view_index] != dicing_camera_array[view_index]; | |||||
| delete camera_array[view_index]; | |||||
| if (cameras_are_different) { | |||||
| delete dicing_camera_array[view_index]; | |||||
| } | |||||
| } | |||||
| scene->camera = camera_original; | |||||
| scene->dicing_camera = dicing_camera_original; | |||||
| if(is_single_layer) { | if(is_single_layer) { | ||||
| BL::RenderResult b_rr = b_engine.get_result(); | BL::RenderResult b_rr = b_engine.get_result(); | ||||
| string num_aa_samples = string_printf("%d", session->params.samples); | string num_aa_samples = string_printf("%d", session->params.samples); | ||||
| b_rr.stamp_data_add_field("Cycles Samples", num_aa_samples.c_str()); | b_rr.stamp_data_add_field("Cycles Samples", num_aa_samples.c_str()); | ||||
| /* TODO(sergey): Report whether we're doing resumable render | /* TODO(sergey): Report whether we're doing resumable render | ||||
| * and also start/end sample if so. | * and also start/end sample if so. | ||||
| */ | */ | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 910 Lines • Show Last 20 Lines | |||||
Missing spaces?