Discard unwanted tiles from tile queue

This commit is contained in:
Tom Payne
2013-01-18 16:36:26 +01:00
parent 111b4585a8
commit 1c524caae6
8 changed files with 63 additions and 23 deletions
@@ -87,6 +87,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileSourceKey = goog.getUid(tileSource).toString();
var tileGrid = tileSource.getTileGrid();
var tileSize = tileGrid.getTileSize();
var z = tileGrid.getZForResolution(view2DState.resolution);
@@ -165,7 +166,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
tileState = tile.getState();
if (tileState == ol.TileState.IDLE) {
tileCenter = tileGrid.getTileCoordCenter(tileCoord);
frameState.tileQueue.enqueue(tile, tileCenter, tileResolution);
frameState.tileQueue.enqueue(tile, tileSourceKey, tileCenter);
} else if (tileState == ol.TileState.LOADED) {
tilesToDrawByZ[z][tileCoord.toString()] = tile;
continue;
@@ -216,6 +217,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
}
this.updateTileUsage(frameState.tileUsage, tileSource, z, tileRange);
this.updateWantedTiles(frameState.wantedTiles, tileSource, z, tileRange);
var transform = this.transform_;
goog.vec.Mat4.makeIdentity(transform);
+3 -1
View File
@@ -83,6 +83,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileSourceKey = goog.getUid(tileSource).toString();
var tileGrid = tileSource.getTileGrid();
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileResolution = tileGrid.getResolution(z);
@@ -132,7 +133,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
tileState = tile.getState();
if (tileState == ol.TileState.IDLE) {
tileCenter = tileGrid.getTileCoordCenter(tileCoord);
frameState.tileQueue.enqueue(tile, tileCenter, tileResolution);
frameState.tileQueue.enqueue(tile, tileSourceKey, tileCenter);
} else if (tileState == ol.TileState.LOADED) {
tilesToDrawByZ[z][tileCoord.toString()] = tile;
continue;
@@ -237,6 +238,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
}
this.updateTileUsage(frameState.tileUsage, tileSource, z, tileRange);
this.updateWantedTiles(frameState.wantedTiles, tileSource, z, tileRange);
};
+25
View File
@@ -151,3 +151,28 @@ ol.renderer.Layer.prototype.updateTileUsage =
tileUsage[sourceKey][zKey] = tileRange;
}
};
/**
* @protected
* @param {Object.<string, Object.<string, ol.TileRange>>} wantedTiles Wanted
* tile ranges.
* @param {ol.source.Source} source Source.
* @param {number} z Z.
* @param {ol.TileRange} tileRange Tile range.
*/
ol.renderer.Layer.prototype.updateWantedTiles =
function(wantedTiles, source, z, tileRange) {
var sourceKey = goog.getUid(source).toString();
var zKey = z.toString();
if (sourceKey in wantedTiles) {
if (zKey in wantedTiles[sourceKey]) {
wantedTiles[sourceKey][zKey].extend(tileRange);
} else {
wantedTiles[sourceKey][zKey] = tileRange;
}
} else {
wantedTiles[sourceKey] = {};
wantedTiles[sourceKey][zKey] = tileRange;
}
};
@@ -270,6 +270,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileSourceKey = goog.getUid(tileSource).toString();
var tileGrid = tileSource.getTileGrid();
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileResolution = tileGrid.getResolution(z);
@@ -392,7 +393,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
tileState = tile.getState();
if (tileState == ol.TileState.IDLE) {
tileCenter = tileGrid.getTileCoordCenter(tileCoord);
frameState.tileQueue.enqueue(tile, tileCenter, tileResolution);
frameState.tileQueue.enqueue(tile, tileSourceKey, tileCenter);
} else if (tileState == ol.TileState.LOADED) {
if (mapRenderer.isTileTextureLoaded(tile)) {
tilesToDrawByZ[z][tileCoord.toString()] = tile;
@@ -460,6 +461,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
}
this.updateTileUsage(frameState.tileUsage, tileSource, z, tileRange);
this.updateWantedTiles(frameState.wantedTiles, tileSource, z, tileRange);
goog.vec.Mat4.makeIdentity(this.matrix_);
goog.vec.Mat4.translate(this.matrix_,