From 11b8c0ff479b7b5924bf9e58d04c79f6b5037cbd Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 6 Feb 2013 17:47:03 -0700 Subject: [PATCH] Don't generate new tiles while animating --- examples/vector-layer.html | 2 +- .../canvas/canvasvectorlayerrenderer.js | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/examples/vector-layer.html b/examples/vector-layer.html index 49da90dba9..a15adb4e8a 100644 --- a/examples/vector-layer.html +++ b/examples/vector-layer.html @@ -27,7 +27,7 @@ } } - Full-screen example + Vector Layer Example
diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index 3c93c85765..a11c755416 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -220,7 +220,7 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame = */ if (!this.dirty_ && this.renderedResolution_ === tileResolution && // TODO: extent.equals() - this.renderedResolution_.toString() === tileRangeExtent.toString()) { + this.renderedExtent_.toString() === tileRangeExtent.toString()) { return; } @@ -283,7 +283,7 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame = tileCoord = new ol.TileCoord(z, x, y); key = tileCoord.toString(); tile = this.tileCache_[key]; - if (tile === undefined) { + if (tile === undefined && !frameState.viewHints[ol.ViewHint.ANIMATING]) { tileExtent = tileGrid.getTileCoordExtent(tileCoord); // TODO: instead of filtering here, do this on the source and maintain // a spatial index @@ -320,7 +320,7 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame = // LRU - move tile key to the end of the index goog.array.remove(this.tileCacheIndex_, key); this.tileCacheIndex_.push(key); - if (tile === undefined) { + if (tile === undefined && !frameState.viewHints[ol.ViewHint.ANIMATING]) { tile = /** @type {HTMLCanvasElement} */ this.tileArchetype_.cloneNode(false); tile.getContext('2d').drawImage(sketchCanvas, @@ -333,12 +333,18 @@ ol.renderer.canvas.VectorLayer.prototype.renderFrame = delete this.tileCache_[this.tileCacheIndex_.shift()]; } } - finalContext.drawImage(tile, - tileSize.width * (tileCoord.x - tileRange.minX), - tileSize.height * (tileRange.maxY - tileCoord.y)); + if (tile) { + finalContext.drawImage(tile, + tileSize.width * (tileCoord.x - tileRange.minX), + tileSize.height * (tileRange.maxY - tileCoord.y)); + } else { + // we decided not to generate a tile during animation + this.dirty_ = true; + } } this.renderedResolution_ = tileResolution; + this.renderedExtent_ = tileRangeExtent; };