Render older loaded tiles while waiting for new tiles

This commit is contained in:
Thomas Moelhave
2016-09-01 19:54:06 +02:00
parent 98aba50735
commit 69fc9edb4d
6 changed files with 152 additions and 22 deletions

View File

@@ -302,26 +302,16 @@ ol.source.TileImage.prototype.getTileInternal = function(z, x, y, pixelRatio, pr
// can use it then we use it. Otherwise we create a new tile. In both
// cases we attempt to assign an interim tile to the new tile.
var /** @type {ol.Tile} */ interimTile = tile;
if (tile.interimTile && tile.interimTile.key == key) {
ol.DEBUG && console.assert(tile.interimTile.getState() == ol.Tile.State.LOADED);
ol.DEBUG && console.assert(tile.interimTile.interimTile === null);
tile = tile.interimTile;
if (interimTile.getState() == ol.Tile.State.LOADED) {
tile.interimTile = interimTile;
}
tile = this.createTile_(z, x, y, pixelRatio, projection, key);
//make the new tile the head of the list,
if (interimTile.getState() == ol.Tile.State.IDLE) {
//the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it
tile.interimTile = interimTile.interimTile;
} else {
tile = this.createTile_(z, x, y, pixelRatio, projection, key);
if (interimTile.getState() == ol.Tile.State.LOADED) {
tile.interimTile = interimTile;
} else if (interimTile.interimTile &&
interimTile.interimTile.getState() == ol.Tile.State.LOADED) {
tile.interimTile = interimTile.interimTile;
interimTile.interimTile = null;
}
}
if (tile.interimTile) {
tile.interimTile.interimTile = null;
tile.interimTile = interimTile;
}
tile.refreshInterimChain();
this.tileCache.replace(tileCoordKey, tile);
}
}