From afefe66af8eb4fa6c5255b2e412bb0f865e5eff9 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 28 Dec 2016 11:55:51 -0700 Subject: [PATCH 1/2] Make layers responsible for creating layer renderers --- src/ol/layer/base.js | 9 +++++++++ src/ol/layer/image.js | 18 ++++++++++++++++++ src/ol/layer/tile.js | 18 ++++++++++++++++++ src/ol/layer/vector.js | 18 ++++++++++++++++++ src/ol/layer/vectortile.js | 15 +++++++++++++++ src/ol/renderer/canvas/map.js | 27 --------------------------- src/ol/renderer/map.js | 11 +---------- src/ol/renderer/webgl/map.js | 23 ----------------------- 8 files changed, 79 insertions(+), 60 deletions(-) diff --git a/src/ol/layer/base.js b/src/ol/layer/base.js index 22f1495c1c..b16210563c 100644 --- a/src/ol/layer/base.js +++ b/src/ol/layer/base.js @@ -54,6 +54,15 @@ ol.layer.Base = function(options) { ol.inherits(ol.layer.Base, ol.Object); +/** + * Create a renderer for this layer. + * @abstract + * @param {ol.renderer.Map} mapRenderer The map renderer. + * @return {ol.renderer.Layer} A layer renderer. + */ +ol.layer.Base.prototype.createRenderer = function(mapRenderer) {}; + + /** * @return {ol.LayerState} Layer state. */ diff --git a/src/ol/layer/image.js b/src/ol/layer/image.js index ce1241d08c..31c6fee146 100644 --- a/src/ol/layer/image.js +++ b/src/ol/layer/image.js @@ -2,6 +2,9 @@ goog.provide('ol.layer.Image'); goog.require('ol'); goog.require('ol.layer.Layer'); +goog.require('ol.renderer.Type'); +goog.require('ol.renderer.canvas.ImageLayer'); +goog.require('ol.renderer.webgl.ImageLayer'); /** @@ -25,6 +28,21 @@ ol.layer.Image = function(opt_options) { ol.inherits(ol.layer.Image, ol.layer.Layer); +/** + * @inheritDoc + */ +ol.layer.Image.prototype.createRenderer = function(mapRenderer) { + var renderer = null; + var type = mapRenderer.getType(); + if (ol.ENABLE_CANVAS && type === ol.renderer.Type.CANVAS) { + renderer = new ol.renderer.canvas.ImageLayer(this); + } else if (ol.ENABLE_WEBGL && type === ol.renderer.Type.WEBGL) { + renderer = new ol.renderer.webgl.ImageLayer(/** @type {ol.renderer.webgl.Map} */ (mapRenderer), this); + } + return renderer; +}; + + /** * Return the associated {@link ol.source.Image source} of the image layer. * @function diff --git a/src/ol/layer/tile.js b/src/ol/layer/tile.js index 8a68aa7216..6749513d13 100644 --- a/src/ol/layer/tile.js +++ b/src/ol/layer/tile.js @@ -4,6 +4,9 @@ goog.require('ol'); goog.require('ol.layer.Layer'); goog.require('ol.layer.TileProperty'); goog.require('ol.obj'); +goog.require('ol.renderer.Type'); +goog.require('ol.renderer.canvas.TileLayer'); +goog.require('ol.renderer.webgl.TileLayer'); /** @@ -36,6 +39,21 @@ ol.layer.Tile = function(opt_options) { ol.inherits(ol.layer.Tile, ol.layer.Layer); +/** + * @inheritDoc + */ +ol.layer.Tile.prototype.createRenderer = function(mapRenderer) { + var renderer = null; + var type = mapRenderer.getType(); + if (ol.ENABLE_CANVAS && type === ol.renderer.Type.CANVAS) { + renderer = new ol.renderer.canvas.TileLayer(this); + } else if (ol.ENABLE_WEBGL && type === ol.renderer.Type.WEBGL) { + renderer = new ol.renderer.webgl.TileLayer(/** @type {ol.renderer.webgl.Map} */ (mapRenderer), this); + } + return renderer; +}; + + /** * Return the level as number to which we will preload tiles up to. * @return {number} The level to preload tiles up to. diff --git a/src/ol/layer/vector.js b/src/ol/layer/vector.js index c7b3d6edd3..b6133a4d25 100644 --- a/src/ol/layer/vector.js +++ b/src/ol/layer/vector.js @@ -3,6 +3,9 @@ goog.provide('ol.layer.Vector'); goog.require('ol'); goog.require('ol.layer.Layer'); goog.require('ol.obj'); +goog.require('ol.renderer.Type'); +goog.require('ol.renderer.canvas.VectorLayer'); +goog.require('ol.renderer.webgl.VectorLayer'); goog.require('ol.style.Style'); @@ -78,6 +81,21 @@ ol.layer.Vector = function(opt_options) { ol.inherits(ol.layer.Vector, ol.layer.Layer); +/** + * @inheritDoc + */ +ol.layer.Vector.prototype.createRenderer = function(mapRenderer) { + var renderer = null; + var type = mapRenderer.getType(); + if (ol.ENABLE_CANVAS && type === ol.renderer.Type.CANVAS) { + renderer = new ol.renderer.canvas.VectorLayer(this); + } else if (ol.ENABLE_WEBGL && type === ol.renderer.Type.WEBGL) { + renderer = new ol.renderer.webgl.VectorLayer(/** @type {ol.renderer.webgl.Map} */ (mapRenderer), this); + } + return renderer; +}; + + /** * @return {number|undefined} Render buffer. */ diff --git a/src/ol/layer/vectortile.js b/src/ol/layer/vectortile.js index 20ed72c21e..4a4dd8af3a 100644 --- a/src/ol/layer/vectortile.js +++ b/src/ol/layer/vectortile.js @@ -6,6 +6,8 @@ goog.require('ol.layer.TileProperty'); goog.require('ol.layer.Vector'); goog.require('ol.layer.VectorTileRenderType'); goog.require('ol.obj'); +goog.require('ol.renderer.Type'); +goog.require('ol.renderer.canvas.VectorTileLayer'); /** @@ -49,6 +51,19 @@ ol.layer.VectorTile = function(opt_options) { ol.inherits(ol.layer.VectorTile, ol.layer.Vector); +/** + * @inheritDoc + */ +ol.layer.VectorTile.prototype.createRenderer = function(mapRenderer) { + var renderer = null; + var type = mapRenderer.getType(); + if (ol.ENABLE_CANVAS && type === ol.renderer.Type.CANVAS) { + renderer = new ol.renderer.canvas.VectorTileLayer(this); + } + return renderer; +}; + + /** * Return the level as number to which we will preload tiles up to. * @return {number} The level to preload tiles up to. diff --git a/src/ol/renderer/canvas/map.js b/src/ol/renderer/canvas/map.js index 62f922e739..6db282e133 100644 --- a/src/ol/renderer/canvas/map.js +++ b/src/ol/renderer/canvas/map.js @@ -7,21 +7,13 @@ goog.require('ol'); goog.require('ol.array'); goog.require('ol.css'); goog.require('ol.dom'); -goog.require('ol.layer.Image'); goog.require('ol.layer.Layer'); -goog.require('ol.layer.Tile'); -goog.require('ol.layer.Vector'); -goog.require('ol.layer.VectorTile'); goog.require('ol.render.Event'); goog.require('ol.render.EventType'); goog.require('ol.render.canvas'); goog.require('ol.render.canvas.Immediate'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.Type'); -goog.require('ol.renderer.canvas.ImageLayer'); -goog.require('ol.renderer.canvas.TileLayer'); -goog.require('ol.renderer.canvas.VectorLayer'); -goog.require('ol.renderer.canvas.VectorTileLayer'); goog.require('ol.source.State'); @@ -68,25 +60,6 @@ ol.renderer.canvas.Map = function(container, map) { ol.inherits(ol.renderer.canvas.Map, ol.renderer.Map); -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) { - if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { - return new ol.renderer.canvas.ImageLayer(layer); - } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { - return new ol.renderer.canvas.TileLayer(layer); - } else if (ol.ENABLE_VECTOR_TILE && layer instanceof ol.layer.VectorTile) { - return new ol.renderer.canvas.VectorTileLayer(layer); - } else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) { - return new ol.renderer.canvas.VectorLayer(layer); - } else { - ol.DEBUG && console.assert(false, 'unexpected layer configuration'); - return null; - } -}; - - /** * @param {ol.render.EventType} type Event type. * @param {olx.FrameState} frameState Frame state. diff --git a/src/ol/renderer/map.js b/src/ol/renderer/map.js index de571dd3ed..fb432f55b9 100644 --- a/src/ol/renderer/map.js +++ b/src/ol/renderer/map.js @@ -67,15 +67,6 @@ ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) { }; -/** - * @abstract - * @param {ol.layer.Layer} layer Layer. - * @protected - * @return {ol.renderer.Layer} layerRenderer Layer renderer. - */ -ol.renderer.Map.prototype.createLayerRenderer = function(layer) {}; - - /** * @inheritDoc */ @@ -216,7 +207,7 @@ ol.renderer.Map.prototype.getLayerRenderer = function(layer) { if (layerKey in this.layerRenderers_) { return this.layerRenderers_[layerKey]; } else { - var layerRenderer = this.createLayerRenderer(layer); + var layerRenderer = layer.createRenderer(this); this.layerRenderers_[layerKey] = layerRenderer; this.layerRendererListeners_[layerKey] = ol.events.listen(layerRenderer, ol.events.EventType.CHANGE, this.handleLayerRendererChange_, this); diff --git a/src/ol/renderer/webgl/map.js b/src/ol/renderer/webgl/map.js index d4752071c9..de165137c1 100644 --- a/src/ol/renderer/webgl/map.js +++ b/src/ol/renderer/webgl/map.js @@ -7,18 +7,12 @@ goog.require('ol.array'); goog.require('ol.css'); goog.require('ol.dom'); goog.require('ol.events'); -goog.require('ol.layer.Image'); goog.require('ol.layer.Layer'); -goog.require('ol.layer.Tile'); -goog.require('ol.layer.Vector'); goog.require('ol.render.Event'); goog.require('ol.render.EventType'); goog.require('ol.render.webgl.Immediate'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.Type'); -goog.require('ol.renderer.webgl.ImageLayer'); -goog.require('ol.renderer.webgl.TileLayer'); -goog.require('ol.renderer.webgl.VectorLayer'); goog.require('ol.source.State'); goog.require('ol.structs.LRUCache'); goog.require('ol.structs.PriorityQueue'); @@ -233,23 +227,6 @@ ol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, tileSize, tileG }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) { - if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { - return new ol.renderer.webgl.ImageLayer(this, layer); - } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { - return new ol.renderer.webgl.TileLayer(this, layer); - } else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) { - return new ol.renderer.webgl.VectorLayer(this, layer); - } else { - ol.DEBUG && console.assert(false, 'unexpected layer configuration'); - return null; - } -}; - - /** * @param {ol.render.EventType} type Event type. * @param {olx.FrameState} frameState Frame state. From a1229cdef7d62429acaa5b64b29ce1487d123435 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 28 Dec 2016 12:03:24 -0700 Subject: [PATCH 2/2] Remove unnecessary build flags --- changelog/upgrade-notes.md | 4 ++++ doc/tutorials/custom-builds.md | 3 --- src/ol/index.js | 32 -------------------------------- 3 files changed, 4 insertions(+), 35 deletions(-) diff --git a/changelog/upgrade-notes.md b/changelog/upgrade-notes.md index 7c9cb254c3..13e3a0ec63 100644 --- a/changelog/upgrade-notes.md +++ b/changelog/upgrade-notes.md @@ -2,6 +2,10 @@ ### Next release +#### Removed build flags (`@define`) + +The `ol.ENABLE_TILE`, `ol.ENABLE_IMAGE`, `ol.ENABLE_VECTOR`, and `ol.ENABLE_VECTOR_TILE` build flags are no longer necessary and have been removed. If you were using these in a `define` array for a custom build, you can remove them. + #### Simplified `ol.View#fit()` API In most cases, it is no longer necessary to provide an `ol.Size` (previously the 2nd argument) to `ol.View#fit()`. By default, the size of the first map that uses the view will be used. If you want to specify a different size, it goes in the options now (previously the 3rd argument, now the 2nd). diff --git a/doc/tutorials/custom-builds.md b/doc/tutorials/custom-builds.md index 8eeb13bbea..28efbe907f 100644 --- a/doc/tutorials/custom-builds.md +++ b/doc/tutorials/custom-builds.md @@ -158,8 +158,6 @@ You might have noticed that the build file you've just created is considerably s ``` "ol.ENABLE_WEBGL=false", "ol.ENABLE_PROJ4JS=false", - "ol.ENABLE_IMAGE=false", - "ol.ENABLE_VECTOR=false", ``` and re-run the build script. The build size should now be smaller. @@ -208,7 +206,6 @@ Now let's try a more complicated example: [`heatmaps-earthquakes`](https://openl "define": [ "ol.ENABLE_WEBGL=false", "ol.ENABLE_PROJ4JS=false", - "ol.ENABLE_IMAGE=false", "ol.DEBUG=false" ], "compilation_level": "ADVANCED", diff --git a/src/ol/index.js b/src/ol/index.js index 096adc4c0b..13250243e4 100644 --- a/src/ol/index.js +++ b/src/ol/index.js @@ -67,14 +67,6 @@ ol.DRAG_BOX_HYSTERESIS_PIXELS = 8; ol.ENABLE_CANVAS = true; -/** - * @define {boolean} Enable rendering of ol.layer.Image based layers. Default - * is `true`. Setting this to false at compile time in advanced mode removes - * all code supporting Image layers from the build. - */ -ol.ENABLE_IMAGE = true; - - /** * @define {boolean} Enable integration with the Proj4js library. Default is * `true`. @@ -89,30 +81,6 @@ ol.ENABLE_PROJ4JS = true; ol.ENABLE_RASTER_REPROJECTION = true; -/** - * @define {boolean} Enable rendering of ol.layer.Tile based layers. Default is - * `true`. Setting this to false at compile time in advanced mode removes - * all code supporting Tile layers from the build. - */ -ol.ENABLE_TILE = true; - - -/** - * @define {boolean} Enable rendering of ol.layer.Vector based layers. Default - * is `true`. Setting this to false at compile time in advanced mode removes - * all code supporting Vector layers from the build. - */ -ol.ENABLE_VECTOR = true; - - -/** - * @define {boolean} Enable rendering of ol.layer.VectorTile based layers. - * Default is `true`. Setting this to false at compile time in advanced mode - * removes all code supporting VectorTile layers from the build. - */ -ol.ENABLE_VECTOR_TILE = true; - - /** * @define {boolean} Enable the WebGL renderer. Default is `true`. Setting * this to false at compile time in advanced mode removes all code