Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/tile.cpp
| Show First 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | TileManager::TileManager(bool progressive_, int num_samples_, int2 tile_size_, int start_resolution_, | ||||
| BufferParams buffer_params; | BufferParams buffer_params; | ||||
| reset(buffer_params, 0); | reset(buffer_params, 0); | ||||
| } | } | ||||
| TileManager::~TileManager() | TileManager::~TileManager() | ||||
| { | { | ||||
| } | } | ||||
| void TileManager::reset(BufferParams& params_, int num_samples_) | static int get_divider(int w, int h, int start_resolution) | ||||
| { | { | ||||
| params = params_; | |||||
| int divider = 1; | int divider = 1; | ||||
| int w = params.width, h = params.height; | |||||
| if(start_resolution != INT_MAX) { | if(start_resolution != INT_MAX) { | ||||
| while(w*h > start_resolution*start_resolution) { | while(w*h > start_resolution*start_resolution) { | ||||
| w = max(1, w/2); | w = max(1, w/2); | ||||
| h = max(1, h/2); | h = max(1, h/2); | ||||
| divider *= 2; | divider *= 2; | ||||
| } | } | ||||
| } | } | ||||
| return divider; | |||||
| } | |||||
| void TileManager::reset(BufferParams& params_, int num_samples_) | |||||
| { | |||||
| params = params_; | |||||
| num_samples = num_samples_; | num_samples = num_samples_; | ||||
| state.buffer = BufferParams(); | state.buffer = BufferParams(); | ||||
| state.sample = range_start_sample - 1; | state.sample = range_start_sample - 1; | ||||
| state.num_tiles = 0; | state.num_tiles = 0; | ||||
| state.num_rendered_tiles = 0; | state.num_rendered_tiles = 0; | ||||
| state.num_samples = 0; | state.num_samples = 0; | ||||
| state.resolution_divider = divider; | state.resolution_divider = get_divider(params.width, params.height, start_resolution); | ||||
| state.tiles.clear(); | state.tiles.clear(); | ||||
| } | } | ||||
| void TileManager::set_samples(int num_samples_) | void TileManager::set_samples(int num_samples_) | ||||
| { | { | ||||
| num_samples = num_samples_; | num_samples = num_samples_; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 221 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| int TileManager::get_num_effective_samples() | int TileManager::get_num_effective_samples() | ||||
| { | { | ||||
| return (range_num_samples == -1) ? num_samples | return (range_num_samples == -1) ? num_samples | ||||
| : range_num_samples; | : range_num_samples; | ||||
| } | } | ||||
| long TileManager::get_total_pixel_samples() | |||||
| { | |||||
| int num_samples = get_num_effective_samples(); | |||||
| /* No real progress indication is possible when using unlimited samples. */ | |||||
| if(num_samples == INT_MAX) { | |||||
| return 0; | |||||
| } | |||||
| int pixel_samples = 0; | |||||
| /* While rendering in the viewport, the initial preview resolution is increased to the native resolution | |||||
| * before the actual rendering begins. Therefore, additional pixel samples will be rendered. */ | |||||
| int divider = get_divider(params.width, params.height, start_resolution) / 2; | |||||
| while(divider > 1) { | |||||
sergey: Is this code running on every tile update? | |||||
| int image_w = max(1, params.width/divider); | |||||
| int image_h = max(1, params.height/divider); | |||||
| pixel_samples += image_w * image_h; | |||||
| divider /= 2; | |||||
sergeyUnsubmitted Not Done Inline Actionsdivider >> 1 ? :) sergey: `divider >> 1` ? :) | |||||
| } | |||||
| return pixel_samples + num_samples * params.width*params.height; | |||||
| } | |||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
Is this code running on every tile update?