From 47e799ced0b580f1e369c13c1e7450dae3097251 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 21 Feb 2013 16:14:51 +0100 Subject: [PATCH] Mark all low resolution tiles as used to prevent cache expiration --- .../canvas/canvastilelayerrenderer.js | 1 + src/ol/renderer/dom/domtilelayerrenderer.js | 1 + src/ol/renderer/layerrenderer.js | 23 +++++++++++++++++++ .../renderer/webgl/webgltilelayerrenderer.js | 1 + 4 files changed, 26 insertions(+) diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index e7c48f044c..c60ef7e49a 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -199,6 +199,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.useLowResolutionTiles(tileSource, z, frameState.extent); this.scheduleExpireCache(frameState, tileSource); var transform = this.transform_; diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index faeb67d47d..3821f2a22b 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -217,6 +217,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.useLowResolutionTiles(tileSource, z, frameState.extent); this.scheduleExpireCache(frameState, tileSource); }; diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index f1477ac8d7..beb91f376a 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -3,6 +3,7 @@ goog.provide('ol.renderer.Layer'); goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('ol.Attribution'); +goog.require('ol.Extent'); goog.require('ol.FrameState'); goog.require('ol.Image'); goog.require('ol.ImageState'); @@ -258,3 +259,25 @@ ol.renderer.Layer.prototype.updateWantedTiles = } wantedTiles[tileSourceKey][coordKey] = true; }; + + +/** + * @protected + * @param {ol.source.TileSource} tileSource Tile source. + * @param {number} z Z. + * @param {ol.Extent} extent Extent. + */ +ol.renderer.Layer.prototype.useLowResolutionTiles = + function(tileSource, z, extent) { + var tileGrid = tileSource.getTileGrid(); + var tileRange, x, y, zKey; + // FIXME this should loop up to tileGrid's minZ when implemented + for (; z >= 0; --z) { + tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + tileSource.useTile(new ol.TileCoord(z, x, y)); + } + } + } +}; diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 53405ca10a..0e939f8665 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -459,6 +459,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.useLowResolutionTiles(tileSource, z, frameState.extent); this.scheduleExpireCache(frameState, tileSource); goog.vec.Mat4.makeIdentity(this.texCoordMatrix_);