From 9081682286be4698ae3891ecf928402542b894bf Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:12:39 -0700 Subject: [PATCH 1/8] Use provided frame state instead of map for pixel to coord conversion --- src/ol/renderer/layerrenderer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 98df08d768..08b7f4e03b 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -13,6 +13,7 @@ goog.require('ol.source.Source'); goog.require('ol.source.State'); goog.require('ol.source.Tile'); goog.require('ol.tilecoord'); +goog.require('ol.vec.Mat4'); @@ -67,7 +68,10 @@ ol.renderer.Layer.prototype.forEachFeatureAtCoordinate = goog.nullFunction; */ ol.renderer.Layer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) { - var coordinate = this.getMap().getCoordinateFromPixel(pixel); + var coordinate = pixel.slice(); + ol.vec.Mat4.multVec2( + frameState.pixelToCoordinateMatrix, coordinate, coordinate); + var hasFeature = this.forEachFeatureAtCoordinate( coordinate, frameState, goog.functions.TRUE, this); From 693ec7706ef645aae0cc3747339af848e35d6f7a Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:30:28 -0700 Subject: [PATCH 2/8] createLayerRenderer must be implemented by subclass --- src/ol/renderer/maprenderer.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 5397f6a470..5fa707a00b 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -84,9 +84,7 @@ ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) { * @protected * @return {ol.renderer.Layer} layerRenderer Layer renderer. */ -ol.renderer.Map.prototype.createLayerRenderer = function(layer) { - return new ol.renderer.Layer(this, layer); -}; +ol.renderer.Map.prototype.createLayerRenderer = goog.abstractMethod; /** From 7f180331718ba8bcc31b6daf6e763e196b209a7f Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:42:36 -0700 Subject: [PATCH 3/8] Make layer renderers observable and re-render on change --- src/ol/renderer/layerrenderer.js | 5 +++-- src/ol/renderer/maprenderer.js | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 08b7f4e03b..796384ce5e 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -6,6 +6,7 @@ goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.functions'); goog.require('ol.ImageState'); +goog.require('ol.Observable'); goog.require('ol.TileRange'); goog.require('ol.TileState'); goog.require('ol.layer.Layer'); @@ -19,7 +20,7 @@ goog.require('ol.vec.Mat4'); /** * @constructor - * @extends {goog.Disposable} + * @extends {ol.Observable} * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Layer} layer Layer. * @suppress {checkStructDictInheritance} @@ -43,7 +44,7 @@ ol.renderer.Layer = function(mapRenderer, layer) { }; -goog.inherits(ol.renderer.Layer, goog.Disposable); +goog.inherits(ol.renderer.Layer, ol.Observable); /** diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 5fa707a00b..c1c7748e67 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -4,6 +4,8 @@ goog.provide('ol.renderer.Map'); goog.require('goog.Disposable'); goog.require('goog.asserts'); goog.require('goog.dispose'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); goog.require('goog.functions'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); @@ -56,6 +58,12 @@ ol.renderer.Map = function(container, map) { */ this.layerRenderers_ = {}; + /** + * @private + * @type {Object.} + */ + this.layerRendererListeners_ = {}; + }; goog.inherits(ol.renderer.Map, goog.Disposable); @@ -254,6 +262,10 @@ ol.renderer.Map.prototype.getLayerRenderer = function(layer) { } else { var layerRenderer = this.createLayerRenderer(layer); this.layerRenderers_[layerKey] = layerRenderer; + this.layerRendererListeners_[layerKey] = goog.events.listen(layerRenderer, + goog.events.EventType.CHANGE, this.handleLayerRendererChange_, + false, this); + return layerRenderer; } }; @@ -293,6 +305,15 @@ ol.renderer.Map.prototype.getMap = function() { ol.renderer.Map.prototype.getType = goog.abstractMethod; +/** + * Handle changes in a layer renderer. + * @private + */ +ol.renderer.Map.prototype.handleLayerRendererChange_ = function() { + this.map_.render(); +}; + + /** * @param {string} layerKey Layer key. * @return {ol.renderer.Layer} Layer renderer. @@ -302,6 +323,11 @@ ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) { goog.asserts.assert(layerKey in this.layerRenderers_); var layerRenderer = this.layerRenderers_[layerKey]; delete this.layerRenderers_[layerKey]; + + goog.asserts.assert(layerKey in this.layerRendererListeners_); + goog.events.unlistenByKey(this.layerRendererListeners_[layerKey]); + delete this.layerRendererListeners_[layerKey]; + return layerRenderer; }; From a460cb3983a221813575530d3662919adf9404b8 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:46:30 -0700 Subject: [PATCH 4/8] Fire change instead of calling render on map --- src/ol/renderer/layerrenderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 796384ce5e..927aa2a497 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -166,7 +166,7 @@ ol.renderer.Layer.prototype.loadImage = function(image) { ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() { var layer = this.getLayer(); if (layer.getVisible() && layer.getSourceState() == ol.source.State.READY) { - this.getMap().render(); + this.changed(); } }; From d4b7bb7c57d7e9590987fbc611aa130f67537317 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:52:34 -0700 Subject: [PATCH 5/8] Use frame state for pixel to coord conversion --- src/ol/renderer/canvas/canvasimagelayerrenderer.js | 4 +++- src/ol/renderer/webgl/webglimagelayerrenderer.js | 4 +++- src/ol/renderer/webgl/webglvectorlayerrenderer.js | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 201806b1ed..712923599e 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -88,7 +88,9 @@ ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel = if (this.getLayer().getSource() instanceof ol.source.ImageVector) { // for ImageVector sources use the original hit-detection logic, // so that for example also transparent polygons are detected - var coordinate = this.getMap().getCoordinateFromPixel(pixel); + var coordinate = pixel.slice(); + ol.vec.Mat4.multVec2( + frameState.pixelToCoordinateMatrix, coordinate, coordinate); var hasFeature = this.forEachFeatureAtCoordinate( coordinate, frameState, goog.functions.TRUE, this); diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index e4d001e99d..d505ca2065 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -235,7 +235,9 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = if (this.getLayer().getSource() instanceof ol.source.ImageVector) { // for ImageVector sources use the original hit-detection logic, // so that for example also transparent polygons are detected - var coordinate = this.getMap().getCoordinateFromPixel(pixel); + var coordinate = pixel.slice(); + ol.vec.Mat4.multVec2( + frameState.pixelToCoordinateMatrix, coordinate, coordinate); var hasFeature = this.forEachFeatureAtCoordinate( coordinate, frameState, goog.functions.TRUE, this); diff --git a/src/ol/renderer/webgl/webglvectorlayerrenderer.js b/src/ol/renderer/webgl/webglvectorlayerrenderer.js index 7a3de9e676..65621e6f20 100644 --- a/src/ol/renderer/webgl/webglvectorlayerrenderer.js +++ b/src/ol/renderer/webgl/webglvectorlayerrenderer.js @@ -9,6 +9,7 @@ goog.require('ol.layer.Vector'); goog.require('ol.render.webgl.ReplayGroup'); goog.require('ol.renderer.vector'); goog.require('ol.renderer.webgl.Layer'); +goog.require('ol.vec.Mat4'); @@ -165,7 +166,9 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate = */ ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) { - var coordinate = this.getMap().getCoordinateFromPixel(pixel); + var coordinate = pixel.slice(); + ol.vec.Mat4.multVec2( + frameState.pixelToCoordinateMatrix, coordinate, coordinate); var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState); if (hasFeature) { From c4ee8518e14da7263dab049457feb55ccaa17e2f Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:52:48 -0700 Subject: [PATCH 6/8] Use frame state for size --- src/ol/renderer/webgl/webgltilelayerrenderer.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 9e79e8ce19..9311118816 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -337,11 +337,10 @@ ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel = if (goog.isNull(this.framebuffer)) { return undefined; } - var mapSize = this.getMap().getSize(); var pixelOnMapScaled = [ - pixel[0] / mapSize[0], - (mapSize[1] - pixel[1]) / mapSize[1]]; + pixel[0] / frameState.size[0], + (frameState.size[1] - pixel[1]) / frameState.size[1]]; var pixelOnFrameBufferScaled = [0, 0]; ol.vec.Mat4.multVec2( From e0f250483d0bd66692eb0b94ab34137c7234b28c Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 7 Feb 2015 16:56:10 -0700 Subject: [PATCH 7/8] Layer renderers don't need access to the map --- src/ol/renderer/layerrenderer.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 927aa2a497..dd73a418c9 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -101,15 +101,6 @@ ol.renderer.Layer.prototype.getLayer = function() { }; -/** - * @protected - * @return {ol.Map} Map. - */ -ol.renderer.Layer.prototype.getMap = function() { - return this.mapRenderer_.getMap(); -}; - - /** * @protected * @return {ol.renderer.Map} Map renderer. From 33c197cf16f0ecedc6c33965e2e8c30488a51da0 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sun, 8 Feb 2015 07:25:10 -0700 Subject: [PATCH 8/8] Layer renderers should not require a map renderer --- .../canvas/canvasimagelayerrenderer.js | 6 ++--- src/ol/renderer/canvas/canvaslayerrenderer.js | 5 ++--- src/ol/renderer/canvas/canvasmaprenderer.js | 6 ++--- .../canvas/canvastilelayerrenderer.js | 6 ++--- .../canvas/canvasvectorlayerrenderer.js | 5 ++--- src/ol/renderer/dom/domimagelayerrenderer.js | 5 ++--- src/ol/renderer/dom/domlayerrenderer.js | 5 ++--- src/ol/renderer/dom/dommaprenderer.js | 6 ++--- src/ol/renderer/dom/domtilelayerrenderer.js | 5 ++--- src/ol/renderer/dom/domvectorlayerrenderer.js | 5 ++--- src/ol/renderer/layerrenderer.js | 18 +-------------- .../renderer/webgl/webglimagelayerrenderer.js | 8 +++---- src/ol/renderer/webgl/webgllayerrenderer.js | 22 ++++++++----------- .../renderer/webgl/webgltilelayerrenderer.js | 9 ++++---- .../webgl/webglvectorlayerrenderer.js | 11 ++++------ test/spec/ol/renderer/layerrenderer.test.js | 5 +---- 16 files changed, 45 insertions(+), 82 deletions(-) diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 712923599e..d5cb82c7a4 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -9,7 +9,6 @@ goog.require('ol.dom'); goog.require('ol.extent'); goog.require('ol.layer.Image'); goog.require('ol.proj'); -goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); goog.require('ol.source.ImageVector'); goog.require('ol.vec.Mat4'); @@ -19,12 +18,11 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.canvas.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Image} imageLayer Single image layer. */ -ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) { +ol.renderer.canvas.ImageLayer = function(imageLayer) { - goog.base(this, mapRenderer, imageLayer); + goog.base(this, imageLayer); /** * @private diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index 7e8dc1cefc..21d0d23c90 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -17,12 +17,11 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Layer} layer Layer. */ -ol.renderer.canvas.Layer = function(mapRenderer, layer) { +ol.renderer.canvas.Layer = function(layer) { - goog.base(this, mapRenderer, layer); + goog.base(this, layer); /** * @private diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index d057cafbb9..2074a898ad 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -77,11 +77,11 @@ goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map); */ ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) { if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { - return new ol.renderer.canvas.ImageLayer(this, layer); + return new ol.renderer.canvas.ImageLayer(layer); } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { - return new ol.renderer.canvas.TileLayer(this, layer); + return new ol.renderer.canvas.TileLayer(layer); } else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) { - return new ol.renderer.canvas.VectorLayer(this, layer); + return new ol.renderer.canvas.VectorLayer(layer); } else { goog.asserts.fail(); return null; diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index f583b6aa48..246d81e3d4 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -13,7 +13,6 @@ goog.require('ol.TileState'); goog.require('ol.dom'); goog.require('ol.extent'); goog.require('ol.layer.Tile'); -goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); goog.require('ol.tilecoord'); goog.require('ol.vec.Mat4'); @@ -23,12 +22,11 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.canvas.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Tile} tileLayer Tile layer. */ -ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) { +ol.renderer.canvas.TileLayer = function(tileLayer) { - goog.base(this, mapRenderer, tileLayer); + goog.base(this, tileLayer); /** * @private diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index 219288c185..2ccec425c3 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -17,12 +17,11 @@ goog.require('ol.renderer.vector'); /** * @constructor * @extends {ol.renderer.canvas.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Vector} vectorLayer Vector layer. */ -ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) { +ol.renderer.canvas.VectorLayer = function(vectorLayer) { - goog.base(this, mapRenderer, vectorLayer); + goog.base(this, vectorLayer); /** * @private diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js index cce9db4785..6746de6691 100644 --- a/src/ol/renderer/dom/domimagelayerrenderer.js +++ b/src/ol/renderer/dom/domimagelayerrenderer.js @@ -18,14 +18,13 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.dom.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Image} imageLayer Image layer. */ -ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) { +ol.renderer.dom.ImageLayer = function(imageLayer) { var target = goog.dom.createElement(goog.dom.TagName.DIV); target.style.position = 'absolute'; - goog.base(this, mapRenderer, imageLayer, target); + goog.base(this, imageLayer, target); /** * The last rendered image. diff --git a/src/ol/renderer/dom/domlayerrenderer.js b/src/ol/renderer/dom/domlayerrenderer.js index 6425ba5091..991ceef4e9 100644 --- a/src/ol/renderer/dom/domlayerrenderer.js +++ b/src/ol/renderer/dom/domlayerrenderer.js @@ -8,13 +8,12 @@ goog.require('ol.renderer.Layer'); /** * @constructor * @extends {ol.renderer.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Layer} layer Layer. * @param {!Element} target Target. */ -ol.renderer.dom.Layer = function(mapRenderer, layer, target) { +ol.renderer.dom.Layer = function(layer, target) { - goog.base(this, mapRenderer, layer); + goog.base(this, layer); /** * @type {!Element} diff --git a/src/ol/renderer/dom/dommaprenderer.js b/src/ol/renderer/dom/dommaprenderer.js index 0eeda851e2..4b966df86a 100644 --- a/src/ol/renderer/dom/dommaprenderer.js +++ b/src/ol/renderer/dom/dommaprenderer.js @@ -112,12 +112,12 @@ ol.renderer.dom.Map.prototype.disposeInternal = function() { ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) { var layerRenderer; if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { - layerRenderer = new ol.renderer.dom.ImageLayer(this, layer); + layerRenderer = new ol.renderer.dom.ImageLayer(layer); } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { - layerRenderer = new ol.renderer.dom.TileLayer(this, layer); + layerRenderer = new ol.renderer.dom.TileLayer(layer); } else if (!(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) && ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) { - layerRenderer = new ol.renderer.dom.VectorLayer(this, layer); + layerRenderer = new ol.renderer.dom.VectorLayer(layer); } else { goog.asserts.fail(); return null; diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index ca4b91d810..cfcb766990 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -30,10 +30,9 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.dom.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Tile} tileLayer Tile layer. */ -ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) { +ol.renderer.dom.TileLayer = function(tileLayer) { var target = goog.dom.createElement(goog.dom.TagName.DIV); target.style.position = 'absolute'; @@ -44,7 +43,7 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) { target.style.height = '100%'; } - goog.base(this, mapRenderer, tileLayer, target); + goog.base(this, tileLayer, target); /** * @private diff --git a/src/ol/renderer/dom/domvectorlayerrenderer.js b/src/ol/renderer/dom/domvectorlayerrenderer.js index bcb5ec63f8..08aa7af139 100644 --- a/src/ol/renderer/dom/domvectorlayerrenderer.js +++ b/src/ol/renderer/dom/domvectorlayerrenderer.js @@ -21,10 +21,9 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.dom.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Vector} vectorLayer Vector layer. */ -ol.renderer.dom.VectorLayer = function(mapRenderer, vectorLayer) { +ol.renderer.dom.VectorLayer = function(vectorLayer) { /** * @private @@ -39,7 +38,7 @@ ol.renderer.dom.VectorLayer = function(mapRenderer, vectorLayer) { target.style.maxWidth = 'none'; target.style.position = 'absolute'; - goog.base(this, mapRenderer, vectorLayer, target); + goog.base(this, vectorLayer, target); /** * @private diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index dd73a418c9..0682ccb159 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -21,21 +21,14 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.Observable} - * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Layer} layer Layer. * @suppress {checkStructDictInheritance} * @struct */ -ol.renderer.Layer = function(mapRenderer, layer) { +ol.renderer.Layer = function(layer) { goog.base(this); - /** - * @private - * @type {ol.renderer.Map} - */ - this.mapRenderer_ = mapRenderer; - /** * @private * @type {ol.layer.Layer} @@ -101,15 +94,6 @@ ol.renderer.Layer.prototype.getLayer = function() { }; -/** - * @protected - * @return {ol.renderer.Map} Map renderer. - */ -ol.renderer.Layer.prototype.getMapRenderer = function() { - return this.mapRenderer_; -}; - - /** * Handle changes in image state. * @param {goog.events.Event} event Image change event. diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index d505ca2065..51f8394b23 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -22,7 +22,7 @@ goog.require('ol.webgl.Context'); /** * @constructor * @extends {ol.renderer.webgl.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.renderer.webgl.Map} mapRenderer Map renderer. * @param {ol.layer.Image} imageLayer Tile layer. */ ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) { @@ -64,7 +64,7 @@ ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) { // http://learningwebgl.com/blog/?p=2101 var imageElement = image.getImage(); - var gl = this.getWebGLMapRenderer().getGL(); + var gl = this.mapRenderer.getGL(); return ol.webgl.Context.createTexture( gl, imageElement, goog.webgl.CLAMP_TO_EDGE, goog.webgl.CLAMP_TO_EDGE); @@ -100,7 +100,7 @@ ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtCoordinate = ol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layerState, context) { - var gl = this.getWebGLMapRenderer().getGL(); + var gl = this.mapRenderer.getGL(); var viewState = frameState.viewState; var viewCenter = viewState.center; @@ -155,7 +155,7 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame = if (!goog.isNull(image)) { goog.asserts.assert(!goog.isNull(texture)); - var canvas = this.getWebGLMapRenderer().getContext().getCanvas(); + var canvas = this.mapRenderer.getContext().getCanvas(); this.updateProjectionMatrix_(canvas.width, canvas.height, viewCenter, viewResolution, viewRotation, image.getExtent()); diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index 26b9ea5770..45b66f2512 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -18,12 +18,18 @@ goog.require('ol.webgl.Context'); /** * @constructor * @extends {ol.renderer.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.renderer.webgl.Map} mapRenderer Map renderer. * @param {ol.layer.Layer} layer Layer. */ ol.renderer.webgl.Layer = function(mapRenderer, layer) { - goog.base(this, mapRenderer, layer); + goog.base(this, layer); + + /** + * @protected + * @type {ol.renderer.webgl.Map} + */ + this.mapRenderer = mapRenderer; /** * @private @@ -96,8 +102,7 @@ goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer); ol.renderer.webgl.Layer.prototype.bindFramebuffer = function(frameState, framebufferDimension) { - var mapRenderer = this.getWebGLMapRenderer(); - var gl = mapRenderer.getGL(); + var gl = this.mapRenderer.getGL(); if (!goog.isDef(this.framebufferDimension) || this.framebufferDimension != framebufferDimension) { @@ -248,15 +253,6 @@ ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = }; -/** - * @protected - * @return {ol.renderer.webgl.Map} MapRenderer. - */ -ol.renderer.webgl.Layer.prototype.getWebGLMapRenderer = function() { - return /** @type {ol.renderer.webgl.Map} */ (this.getMapRenderer()); -}; - - /** * @return {!goog.vec.Mat4.Number} Matrix. */ diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 9311118816..a73ea4f1fd 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -25,7 +25,7 @@ goog.require('ol.webgl.Buffer'); /** * @constructor * @extends {ol.renderer.webgl.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.renderer.webgl.Map} mapRenderer Map renderer. * @param {ol.layer.Tile} tileLayer Tile layer. */ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) { @@ -88,8 +88,7 @@ goog.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer); * @inheritDoc */ ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() { - var mapRenderer = this.getWebGLMapRenderer(); - var context = mapRenderer.getContext(); + var context = this.mapRenderer.getContext(); context.deleteBuffer(this.renderArrayBuffer_); goog.base(this, 'disposeInternal'); }; @@ -110,7 +109,7 @@ ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() { ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerState, context) { - var mapRenderer = this.getWebGLMapRenderer(); + var mapRenderer = this.mapRenderer; var gl = context.getGL(); var viewState = frameState.viewState; @@ -349,7 +348,7 @@ ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel = pixelOnFrameBufferScaled[0] * this.framebufferDimension, pixelOnFrameBufferScaled[1] * this.framebufferDimension]; - var gl = this.getWebGLMapRenderer().getContext().getGL(); + var gl = this.mapRenderer.getContext().getGL(); gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer); var imageData = new Uint8Array(4); gl.readPixels(pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1, diff --git a/src/ol/renderer/webgl/webglvectorlayerrenderer.js b/src/ol/renderer/webgl/webglvectorlayerrenderer.js index 65621e6f20..4a39054f34 100644 --- a/src/ol/renderer/webgl/webglvectorlayerrenderer.js +++ b/src/ol/renderer/webgl/webglvectorlayerrenderer.js @@ -16,7 +16,7 @@ goog.require('ol.vec.Mat4'); /** * @constructor * @extends {ol.renderer.webgl.Layer} - * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.renderer.webgl.Map} mapRenderer Map renderer. * @param {ol.layer.Vector} vectorLayer Vector layer. */ ol.renderer.webgl.VectorLayer = function(mapRenderer, vectorLayer) { @@ -95,8 +95,7 @@ ol.renderer.webgl.VectorLayer.prototype.composeFrame = ol.renderer.webgl.VectorLayer.prototype.disposeInternal = function() { var replayGroup = this.replayGroup_; if (!goog.isNull(replayGroup)) { - var mapRenderer = this.getWebGLMapRenderer(); - var context = mapRenderer.getContext(); + var context = this.mapRenderer.getContext(); replayGroup.getDeleteResourcesFunction(context)(); this.replayGroup_ = null; } @@ -112,8 +111,7 @@ ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtCoordinate = if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) { return undefined; } else { - var mapRenderer = this.getWebGLMapRenderer(); - var context = mapRenderer.getContext(); + var context = this.mapRenderer.getContext(); var viewState = frameState.viewState; var layer = this.getLayer(); var layerState = this.layerState_; @@ -148,8 +146,7 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate = if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) { return false; } else { - var mapRenderer = this.getWebGLMapRenderer(); - var context = mapRenderer.getContext(); + var context = this.mapRenderer.getContext(); var viewState = frameState.viewState; var layerState = this.layerState_; return this.replayGroup_.hasFeatureAtCoordinate(coordinate, diff --git a/test/spec/ol/renderer/layerrenderer.test.js b/test/spec/ol/renderer/layerrenderer.test.js index d16f242ecb..d1c43db8b4 100644 --- a/test/spec/ol/renderer/layerrenderer.test.js +++ b/test/spec/ol/renderer/layerrenderer.test.js @@ -5,10 +5,8 @@ describe('ol.renderer.Layer', function() { var eventType = goog.events.EventType.CHANGE; beforeEach(function() { - var map = new ol.Map({}); - var mapRenderer = map.getRenderer(); var layer = new ol.layer.Layer({}); - renderer = new ol.renderer.Layer(mapRenderer, layer); + renderer = new ol.renderer.Layer(layer); }); describe('#loadImage', function() { @@ -84,6 +82,5 @@ describe('ol.renderer.Layer', function() { goog.require('goog.events.EventType'); goog.require('ol.Image'); goog.require('ol.ImageState'); -goog.require('ol.Map'); goog.require('ol.layer.Layer'); goog.require('ol.renderer.Layer');