[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