Cycles: use simplier strategy in next_tile for viewport rendering

No need to find tile closest to rendered center in this case, just
return first possible tile. Saves some computation power.
This commit is contained in:
Sergey Sharybin 2012-10-25 12:03:36 +00:00
parent 4f812f6b21
commit 2505984b52
2 changed files with 25 additions and 2 deletions

@ -214,11 +214,28 @@ list<Tile>::iterator TileManager::next_center_tile(int device)
return best;
}
list<Tile>::iterator TileManager::next_simple_tile(int device)
{
list<Tile>::iterator iter;
int logical_device = preserve_tile_device? device: 0;
for(iter = state.tiles.begin(); iter != state.tiles.end(); iter++) {
if(iter->device == logical_device && iter->rendering == false)
return iter;
}
return state.tiles.end();
}
bool TileManager::next_tile(Tile& tile, int device)
{
list<Tile>::iterator tile_it;
tile_it = next_center_tile(device);
if(background)
tile_it = next_center_tile(device);
else
tile_it = next_simple_tile(device);
if(tile_it != state.tiles.end()) {
tile_it->rendering = true;

@ -102,7 +102,13 @@ protected:
/* slices image into as much pieces as how many devices are rendering this image */
void gen_tiles_sliced();
list<Tile>::iterator next_center_tile(int device = 0);
/* returns closest tile to center of rendered tiles
* mimics behavior of blender internal's tile order
*/
list<Tile>::iterator next_center_tile(int device);
/* returns first unhandled tile starting from left bottom corner of the image */
list<Tile>::iterator next_simple_tile(int device);
};
CCL_NAMESPACE_END