diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 01313a98b3..fbd45224bf 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -59,6 +59,12 @@ ol.renderer.Map = function(container, map) { */ this.layersListenerKeys_ = null; + /** + * @private + * @type {Object.} + */ + this.layerRendererChangeListenKeys_ = {}; + }; goog.inherits(ol.renderer.Map, goog.Disposable); @@ -140,8 +146,8 @@ ol.renderer.Map.prototype.getCanvas = goog.functions.NULL; * @return {ol.renderer.Layer} Layer renderer. */ ol.renderer.Map.prototype.getLayerRenderer = function(layer) { - var key = goog.getUid(layer); - var layerRenderer = this.layerRenderers[key]; + var layerKey = goog.getUid(layer); + var layerRenderer = this.layerRenderers[layerKey]; goog.asserts.assert(goog.isDef(layerRenderer)); return layerRenderer; }; @@ -155,6 +161,15 @@ ol.renderer.Map.prototype.getMap = function() { }; +/** + * @param {goog.events.Event} event Event. + * @protected + */ +ol.renderer.Map.prototype.handleLayerRendererChange = function(event) { + this.getMap().render(); +}; + + /** * @param {ol.CollectionEvent} collectionEvent Collection event. * @protected @@ -213,10 +228,12 @@ ol.renderer.Map.prototype.removeLayer = function(layer) { * @protected */ ol.renderer.Map.prototype.removeLayerRenderer = function(layer) { - var key = goog.getUid(layer); - if (key in this.layerRenderers) { - var layerRenderer = this.layerRenderers[key]; - delete this.layerRenderers[key]; + var layerKey = goog.getUid(layer); + if (layerKey in this.layerRenderers) { + var layerRenderer = this.layerRenderers[layerKey]; + delete this.layerRenderers[layerKey]; + goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); + delete this.layerRendererChangeListenKeys_[layerKey]; return layerRenderer; } else { return null; @@ -237,7 +254,11 @@ ol.renderer.Map.prototype.renderFrame = goog.nullFunction; * @protected */ ol.renderer.Map.prototype.setLayerRenderer = function(layer, layerRenderer) { - var key = goog.getUid(layer); - goog.asserts.assert(!(key in this.layerRenderers)); - this.layerRenderers[key] = layerRenderer; + var layerKey = goog.getUid(layer); + goog.asserts.assert(!(layerKey in this.layerRenderers)); + this.layerRenderers[layerKey] = layerRenderer; + goog.asserts.assert(!(layerKey in this.layerRendererChangeListenKeys_)); + this.layerRendererChangeListenKeys_[layerKey] = goog.events.listen( + layerRenderer, goog.events.EventType.CHANGE, + this.handleLayerRendererChange, false, this); }; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 6a62129e67..6c657fb0f5 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -206,12 +206,6 @@ ol.renderer.webgl.Map = function(container, map) { */ this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance(); - /** - * @private - * @type {Object.} - */ - this.layerRendererChangeListenKeys_ = {}; - this.initializeGL_(); }; @@ -409,15 +403,6 @@ ol.renderer.webgl.Map.prototype.getShader = function(shaderObject) { }; -/** - * @param {goog.events.Event} event Event. - * @protected - */ -ol.renderer.webgl.Map.prototype.handleLayerRendererChange = function(event) { - this.getMap().render(); -}; - - /** * @param {goog.events.Event} event Event. * @protected @@ -484,20 +469,6 @@ ol.renderer.webgl.Map.prototype.removeLayer = function(layer) { }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.removeLayerRenderer = function(layer) { - var layerRenderer = goog.base(this, 'removeLayerRenderer', layer); - if (!goog.isNull(layerRenderer)) { - var layerKey = goog.getUid(layer); - goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); - delete this.layerRendererChangeListenKeys_[layerKey]; - } - return layerRenderer; -}; - - /** * @inheritDoc */ @@ -604,16 +575,3 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { } }; - - -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.setLayerRenderer = function( - layer, layerRenderer) { - goog.base(this, 'setLayerRenderer', layer, layerRenderer); - var layerKey = goog.getUid(layer); - this.layerRendererChangeListenKeys_[layerKey] = goog.events.listen( - layerRenderer, goog.events.EventType.CHANGE, - this.handleLayerRendererChange, false, this); -};