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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to