diff --git a/src/objectliterals.exports b/src/objectliterals.exports index c60cc92e9a..aa07df96ef 100644 --- a/src/objectliterals.exports +++ b/src/objectliterals.exports @@ -100,6 +100,16 @@ @exportObjectLiteralProperty ol.layer.LayerOptions.source ol.source.Source @exportObjectLiteralProperty ol.layer.LayerOptions.visible boolean|undefined +@exportObjectLiteral ol.layer.TileLayerOptions +@exportObjectLiteralProperty ol.layer.TileLayerOptions.brightness number|undefined +@exportObjectLiteralProperty ol.layer.TileLayerOptions.contrast number|undefined +@exportObjectLiteralProperty ol.layer.TileLayerOptions.hue number|undefined +@exportObjectLiteralProperty ol.layer.TileLayerOptions.opacity number|undefined +@exportObjectLiteralProperty ol.layer.TileLayerOptions.preload boolean|undefined +@exportObjectLiteralProperty ol.layer.TileLayerOptions.saturation number|undefined +@exportObjectLiteralProperty ol.layer.TileLayerOptions.source ol.source.Source +@exportObjectLiteralProperty ol.layer.TileLayerOptions.visible boolean|undefined + @exportObjectLiteral ol.layer.VectorLayerOptions @exportObjectLiteralProperty ol.layer.VectorLayerOptions.opacity number|undefined @exportObjectLiteralProperty ol.layer.VectorLayerOptions.source ol.source.Source diff --git a/src/ol/layer/tilelayer.exports b/src/ol/layer/tilelayer.exports index a567e216ff..9e6ffaf01f 100644 --- a/src/ol/layer/tilelayer.exports +++ b/src/ol/layer/tilelayer.exports @@ -1 +1 @@ -@exportClass ol.layer.TileLayer ol.layer.LayerOptions +@exportClass ol.layer.TileLayer ol.layer.TileLayerOptions diff --git a/src/ol/layer/tilelayer.js b/src/ol/layer/tilelayer.js index 878185e77f..a843713101 100644 --- a/src/ol/layer/tilelayer.js +++ b/src/ol/layer/tilelayer.js @@ -4,21 +4,58 @@ goog.require('ol.layer.Layer'); goog.require('ol.source.TileSource'); +/** + * @enum {string} + */ +ol.layer.TileLayerProperty = { + PRELOAD: 'preload' +}; + + /** * @constructor * @extends {ol.layer.Layer} - * @param {ol.layer.LayerOptions} layerOptions Layer options. + * @param {ol.layer.TileLayerOptions} options Options. */ -ol.layer.TileLayer = function(layerOptions) { - goog.base(this, layerOptions); +ol.layer.TileLayer = function(options) { + + goog.base(this, options); + + this.setPreload( + goog.isDef(options.preload) ? options.preload : false); + }; goog.inherits(ol.layer.TileLayer, ol.layer.Layer); +/** + * @return {boolean} Preload. + */ +ol.layer.TileLayer.prototype.getPreload = function() { + return /** @type {boolean} */ (this.get(ol.layer.TileLayerProperty.PRELOAD)); +}; +goog.exportProperty( + ol.layer.TileLayer.prototype, + 'getPreload', + ol.layer.TileLayer.prototype.getPreload); + + /** * @return {ol.source.TileSource} Source. */ ol.layer.TileLayer.prototype.getTileSource = function() { return /** @type {ol.source.TileSource} */ (this.getSource()); }; + + +/** + * @param {boolean} preload Preload. + */ +ol.layer.TileLayer.prototype.setPreload = function(preload) { + this.set(ol.layer.TileLayerProperty.PRELOAD, preload); +}; +goog.exportProperty( + ol.layer.TileLayer.prototype, + 'setPreload', + ol.layer.TileLayer.prototype.setPreload); diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index 70e528542c..64a1398344 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -285,8 +285,8 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); - this.manageTilePyramid( - frameState, tileSource, tileGrid, projection, extent, z); + this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent, + z, tileLayer.getPreload()); 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 8c056742bd..61cb6a3908 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -218,8 +218,8 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = } this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); - this.manageTilePyramid( - frameState, tileSource, tileGrid, projection, extent, z); + this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent, + z, tileLayer.getPreload()); this.scheduleExpireCache(frameState, tileSource); }; diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 3e1b460385..8a7100ef60 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -17,12 +17,6 @@ goog.require('ol.layer.LayerState'); goog.require('ol.source.TileSource'); -/** - * @define {boolean} Preemptively load low resolution tiles. - */ -ol.PREEMPTIVELY_LOAD_LOW_RESOLUTION_TILES = true; - - /** * @constructor @@ -297,13 +291,15 @@ ol.renderer.Layer.prototype.snapCenterToPixel = * @param {ol.Projection} projection Projection. * @param {ol.Extent} extent Extent. * @param {number} currentZ Current Z. + * @param {boolean} preload Preload low resolution tiles. * @param {function(this: T, ol.Tile)=} opt_tileCallback Tile callback. * @param {T=} opt_obj Object. * @protected * @template T */ -ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource, - tileGrid, projection, extent, currentZ, opt_tileCallback, opt_obj) { +ol.renderer.Layer.prototype.manageTilePyramid = function( + frameState, tileSource, tileGrid, projection, extent, currentZ, preload, + opt_tileCallback, opt_obj) { var tileSourceKey = goog.getUid(tileSource).toString(); if (!(tileSourceKey in frameState.wantedTiles)) { frameState.wantedTiles[tileSourceKey] = {}; @@ -317,7 +313,7 @@ ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource, tileResolution = tileGrid.getResolution(z); for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) { - if (ol.PREEMPTIVELY_LOAD_LOW_RESOLUTION_TILES || z == currentZ) { + if (preload || z == currentZ) { tile = tileSource.getTile(z, x, y, tileGrid, projection); if (tile.getState() == ol.TileState.IDLE) { wantedTiles[tile.tileCoord.toString()] = true; diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index f591ffebab..690dd6ffaa 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -269,6 +269,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = var tileTextureQueue = mapRenderer.getTileTextureQueue(); this.manageTilePyramid( frameState, tileSource, tileGrid, projection, extent, z, + tileLayer.getPreload(), function(tile) { if (tile.getState() == ol.TileState.LOADED && !mapRenderer.isTileTextureLoaded(tile) &&