[Bf-blender-cvs] [8e07b87] master: Cycles: Fix Tile access in the TileManager for viewport rendering
Lukas Stockner
noreply at git.blender.org
Thu Dec 24 01:44:34 CET 2015
Commit: 8e07b878660550b8c3fbbdb5a2890b91b85aecaa
Author: Lukas Stockner
Date: Thu Dec 24 00:29:40 2015 +0100
Branches: master
https://developer.blender.org/rB8e07b878660550b8c3fbbdb5a2890b91b85aecaa
Cycles: Fix Tile access in the TileManager for viewport rendering
- When rendering in the Viewport, next_tile is sometimes called after a reset has been performed, but before
new tiles were generated. In that case, the tile list would be invalid, causing Blender to crash randomly.
- When generating new tiles, the TileManager would not clear the tile lists before re-generating them, leading
to some tiles being skipped during viewport rendering.
- When popping the next tile from a tile list, a reference to the just-deleted object would be returned, now the
object is copied before deleting it.
===================================================================
M intern/cycles/render/tile.cpp
===================================================================
diff --git a/intern/cycles/render/tile.cpp b/intern/cycles/render/tile.cpp
index 5849ac2..8692be7 100644
--- a/intern/cycles/render/tile.cpp
+++ b/intern/cycles/render/tile.cpp
@@ -128,6 +128,7 @@ int TileManager::gen_tiles(bool sliced)
int slice_num = sliced? num: 1;
int tile_index = 0;
+ state.tiles.clear();
state.tiles.resize(num);
vector<list<Tile> >::iterator tile_list = state.tiles.begin();
@@ -187,12 +188,11 @@ void TileManager::set_tiles()
bool TileManager::next_tile(Tile& tile, int device)
{
int logical_device = preserve_tile_device? device: 0;
- assert(logical_device < state.tiles.size());
- if(state.tiles[logical_device].empty())
+ if((logical_device >= state.tiles.size()) || state.tiles[logical_device].empty())
return false;
- tile = state.tiles[logical_device].front();
+ tile = Tile(state.tiles[logical_device].front());
state.tiles[logical_device].pop_front();
state.num_rendered_tiles++;
return true;
More information about the Bf-blender-cvs
mailing list