Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_session.cpp
| Show First 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | else { | ||||
| sync->sync_camera(b_render, b_camera_override, width, height, ""); | sync->sync_camera(b_render, b_camera_override, width, height, ""); | ||||
| } | } | ||||
| /* set buffer parameters */ | /* set buffer parameters */ | ||||
| const BufferParams buffer_params = BlenderSync::get_buffer_params( | const BufferParams buffer_params = BlenderSync::get_buffer_params( | ||||
| b_v3d, b_rv3d, scene->camera, width, height); | b_v3d, b_rv3d, scene->camera, width, height); | ||||
| session->reset(session_params, buffer_params); | session->reset(session_params, buffer_params); | ||||
| /* Create GPU display. | |||||
| * TODO(sergey): Investigate whether DisplayDriver can be used for the preview as well. */ | |||||
| if (!b_engine.is_preview() && !headless) { | |||||
| unique_ptr<BlenderDisplayDriver> display_driver = make_unique<BlenderDisplayDriver>(b_engine, | |||||
| b_scene); | |||||
| display_driver_ = display_driver.get(); | |||||
| session->set_display_driver(move(display_driver)); | |||||
| } | |||||
| /* Viewport and preview (as in, material preview) does not do tiled rendering, so can inform | /* Viewport and preview (as in, material preview) does not do tiled rendering, so can inform | ||||
| * engine that no tracking of the tiles state is needed. | * engine that no tracking of the tiles state is needed. | ||||
| * The offline rendering will make a decision when tile is being written. The penalty of asking | * The offline rendering will make a decision when tile is being written. The penalty of asking | ||||
| * the engine to keep track of tiles state is minimal, so there is nothing to worry about here | * the engine to keep track of tiles state is minimal, so there is nothing to worry about here | ||||
| * about possible single-tiled final render. */ | * about possible single-tiled final render. */ | ||||
| if (!b_engine.is_preview() && !b_v3d) { | if (!b_engine.is_preview() && !b_v3d) { | ||||
| b_engine.use_highlight_tiles(true); | b_engine.use_highlight_tiles(true); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | void BlenderSession::render(BL::Depsgraph &b_depsgraph_) | ||||
| b_depsgraph = b_depsgraph_; | b_depsgraph = b_depsgraph_; | ||||
| if (session->progress.get_cancel()) { | if (session->progress.get_cancel()) { | ||||
| update_status_progress(); | update_status_progress(); | ||||
| return; | return; | ||||
| } | } | ||||
| /* Create driver to write out render results. */ | /* Create driver to write out render results. */ | ||||
| ensure_display_driver_if_needed(); | |||||
| session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine)); | session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine)); | ||||
| session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); }; | session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); }; | ||||
| BL::ViewLayer b_view_layer = b_depsgraph.view_layer_eval(); | BL::ViewLayer b_view_layer = b_depsgraph.view_layer_eval(); | ||||
| /* get buffer parameters */ | /* get buffer parameters */ | ||||
| const SessionParams session_params = BlenderSync::get_session_params( | const SessionParams session_params = BlenderSync::get_session_params( | ||||
| ▲ Show 20 Lines • Show All 356 Lines • ▼ Show 20 Lines | if (scene->need_reset()) { | ||||
| /* reset time */ | /* reset time */ | ||||
| start_resize_time = 0.0; | start_resize_time = 0.0; | ||||
| } | } | ||||
| /* unlock */ | /* unlock */ | ||||
| session->scene->mutex.unlock(); | session->scene->mutex.unlock(); | ||||
| ensure_display_driver_if_needed(); | |||||
| /* Start rendering thread, if it's not running already. Do this | /* Start rendering thread, if it's not running already. Do this | ||||
| * after all scene data has been synced at least once. */ | * after all scene data has been synced at least once. */ | ||||
| session->start(); | session->start(); | ||||
| } | } | ||||
| void BlenderSession::draw(BL::SpaceImageEditor &space_image) | void BlenderSession::draw(BL::SpaceImageEditor &space_image) | ||||
| { | { | ||||
| if (!session || !session->scene) { | if (!session || !session->scene) { | ||||
| Show All 20 Lines | if (!pass) { | ||||
| return; | return; | ||||
| } | } | ||||
| scene->film->set_display_pass(pass->get_type()); | scene->film->set_display_pass(pass->get_type()); | ||||
| draw_state_.last_pass_index = pass_index; | draw_state_.last_pass_index = pass_index; | ||||
| } | } | ||||
| if (display_driver_) { | |||||
| BL::Array<float, 2> zoom = space_image.zoom(); | BL::Array<float, 2> zoom = space_image.zoom(); | ||||
| display_driver_->set_zoom(zoom[0], zoom[1]); | display_driver_->set_zoom(zoom[0], zoom[1]); | ||||
| } | |||||
| session->draw(); | session->draw(); | ||||
| } | } | ||||
| void BlenderSession::view_draw(int w, int h) | void BlenderSession::view_draw(int w, int h) | ||||
| { | { | ||||
| /* pause in redraw in case update is not being called due to final render */ | /* pause in redraw in case update is not being called due to final render */ | ||||
| session->set_pause(BlenderSync::get_session_pause(b_scene, background)); | session->set_pause(BlenderSync::get_session_pause(b_scene, background)); | ||||
| ▲ Show 20 Lines • Show All 198 Lines • ▼ Show 20 Lines | if (!background) { | ||||
| * memory would cause things to be allocated and evaluated for every | * memory would cause things to be allocated and evaluated for every | ||||
| * updated sample. | * updated sample. | ||||
| */ | */ | ||||
| return; | return; | ||||
| } | } | ||||
| b_engine.free_blender_memory(); | b_engine.free_blender_memory(); | ||||
| } | } | ||||
| void BlenderSession::ensure_display_driver_if_needed() | |||||
| { | |||||
| if (display_driver_) { | |||||
| /* Driver is already created. */ | |||||
| return; | |||||
| } | |||||
| if (headless) { | |||||
| /* No display needed for headless. */ | |||||
| return; | |||||
| } | |||||
| if (b_engine.is_preview()) { | |||||
| /* TODO(sergey): Investigate whether DisplayDriver can be used for the preview as well. */ | |||||
| return; | |||||
| } | |||||
| unique_ptr<BlenderDisplayDriver> display_driver = make_unique<BlenderDisplayDriver>(b_engine, | |||||
| b_scene); | |||||
| display_driver_ = display_driver.get(); | |||||
| session->set_display_driver(move(display_driver)); | |||||
| } | |||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||