Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/session.cpp
| Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | |||||
| Session::Session(const SessionParams ¶ms_, const SceneParams &scene_params) | Session::Session(const SessionParams ¶ms_, const SceneParams &scene_params) | ||||
| : params(params_), render_scheduler_(tile_manager_, params) | : params(params_), render_scheduler_(tile_manager_, params) | ||||
| { | { | ||||
| TaskScheduler::init(params.threads); | TaskScheduler::init(params.threads); | ||||
| session_thread_ = nullptr; | session_thread_ = nullptr; | ||||
| delayed_reset_.do_reset = false; | delayed_reset_.do_reset = false; | ||||
| delayed_reset_.samples = 0; | |||||
| pause_ = false; | pause_ = false; | ||||
| cancel_ = false; | cancel_ = false; | ||||
| new_work_added_ = false; | new_work_added_ = false; | ||||
| device = Device::create(params.device, stats, profiler); | device = Device::create(params.device, stats, profiler); | ||||
| scene = new Scene(scene_params, device); | scene = new Scene(scene_params, device); | ||||
| ▲ Show 20 Lines • Show All 325 Lines • ▼ Show 20 Lines | |||||
| void Session::do_delayed_reset() | void Session::do_delayed_reset() | ||||
| { | { | ||||
| if (!delayed_reset_.do_reset) { | if (!delayed_reset_.do_reset) { | ||||
| return; | return; | ||||
| } | } | ||||
| delayed_reset_.do_reset = false; | delayed_reset_.do_reset = false; | ||||
| buffer_params_ = delayed_reset_.params; | params = delayed_reset_.session_params; | ||||
| buffer_params_ = delayed_reset_.buffer_params; | |||||
| /* Tile and work scheduling. */ | /* Tile and work scheduling. */ | ||||
| tile_manager_.reset(buffer_params_, get_effective_tile_size()); | tile_manager_.reset(buffer_params_, get_effective_tile_size()); | ||||
| render_scheduler_.reset(buffer_params_, delayed_reset_.samples); | render_scheduler_.reset(buffer_params_, params.samples); | ||||
| /* Passes. */ | /* Passes. */ | ||||
| /* When multiple tiles are used SAMPLE_COUNT pass is used to keep track of possible partial | /* When multiple tiles are used SAMPLE_COUNT pass is used to keep track of possible partial | ||||
| * tile results. It is safe to use generic update function here which checks for changes since | * tile results. It is safe to use generic update function here which checks for changes since | ||||
| * changes in tile settings re-creates session, which ensures film is fully updated on tile | * changes in tile settings re-creates session, which ensures film is fully updated on tile | ||||
| * changes. */ | * changes. */ | ||||
| scene->film->update_passes(scene, tile_manager_.has_multiple_tiles()); | scene->film->update_passes(scene, tile_manager_.has_multiple_tiles()); | ||||
| /* Update for new state of passes. */ | /* Update for new state of passes. */ | ||||
| buffer_params_.update_passes(scene->passes); | buffer_params_.update_passes(scene->passes); | ||||
| tile_manager_.update_passes(buffer_params_); | tile_manager_.update_passes(buffer_params_); | ||||
| /* Progress. */ | /* Progress. */ | ||||
| progress.reset_sample(); | progress.reset_sample(); | ||||
| progress.set_total_pixel_samples(delayed_reset_.params.width * delayed_reset_.params.height * | progress.set_total_pixel_samples(buffer_params_.width * buffer_params_.height * params.samples); | ||||
| delayed_reset_.samples); | |||||
| if (!params.background) { | if (!params.background) { | ||||
| progress.set_start_time(); | progress.set_start_time(); | ||||
| } | } | ||||
| progress.set_render_start_time(); | progress.set_render_start_time(); | ||||
| } | } | ||||
| void Session::reset(BufferParams &buffer_params, int samples) | void Session::reset(const SessionParams &session_params, const BufferParams &buffer_params) | ||||
| { | { | ||||
| { | { | ||||
| thread_scoped_lock reset_lock(delayed_reset_.mutex); | thread_scoped_lock reset_lock(delayed_reset_.mutex); | ||||
| thread_scoped_lock pause_lock(pause_mutex_); | thread_scoped_lock pause_lock(pause_mutex_); | ||||
| delayed_reset_.params = buffer_params; | |||||
| delayed_reset_.samples = samples; | |||||
| delayed_reset_.do_reset = true; | delayed_reset_.do_reset = true; | ||||
| delayed_reset_.session_params = session_params; | |||||
| delayed_reset_.buffer_params = buffer_params; | |||||
| path_trace_->cancel(); | path_trace_->cancel(); | ||||
| } | } | ||||
| pause_cond_.notify_all(); | pause_cond_.notify_all(); | ||||
| } | } | ||||
| void Session::set_samples(int samples) | void Session::set_samples(int samples) | ||||
| ▲ Show 20 Lines • Show All 245 Lines • Show Last 20 Lines | |||||