diff --git a/src/ol/webgl/layerrenderer.js b/src/ol/webgl/layerrenderer.js index ca9bf10f6f..7f44c5fb57 100644 --- a/src/ol/webgl/layerrenderer.js +++ b/src/ol/webgl/layerrenderer.js @@ -31,6 +31,11 @@ ol.webgl.LayerRenderer.prototype.getGL = function() { }; +/** + */ +ol.webgl.LayerRenderer.prototype.handleContextLost = goog.nullFunction; + + /** */ ol.webgl.LayerRenderer.prototype.redraw = goog.abstractMethod; diff --git a/src/ol/webgl/map.js b/src/ol/webgl/map.js index 3cb2d0b115..2a2d4029a1 100644 --- a/src/ol/webgl/map.js +++ b/src/ol/webgl/map.js @@ -159,9 +159,6 @@ ol.webgl.Map.createVertexShader_ = function() { */ ol.webgl.Map.prototype.createLayerRenderer = function(layer) { var gl = this.getGL(); - if (gl.isContextLost()) { - return null; - } if (layer instanceof ol.TileLayer) { return new ol.webgl.TileLayerRenderer(this, layer); } else { @@ -353,13 +350,12 @@ ol.webgl.Map.prototype.handleSizeChanged = function() { */ ol.webgl.Map.prototype.handleWebGLContextLost = function(event) { event.preventDefault(); - this.forEachLayer(function(layer) { - var layerRenderer = this.removeLayerRenderer(layer); - goog.dispose(layerRenderer); - }, this); - goog.asserts.assert(goog.object.isEmpty(this.layerRenderers)); this.shaderCache_ = {}; this.programCache_ = {}; + this.textureCache_ = {}; + goog.object.forEach(this.layerRenderers, function(layerRenderer) { + layerRenderer.handleContextLost(); + }); }; @@ -371,11 +367,6 @@ ol.webgl.Map.prototype.handleWebGLContextRestored = function() { gl.clearColor(1, 0, 0, 1); gl.disable(goog.webgl.CULL_FACE); gl.disable(goog.webgl.SCISSOR_TEST); - var layers = this.getLayers(); - layers.forEach(function(layer) { - var layerRenderer = this.createLayerRenderer(layer); - this.setLayerRenderer(layer, layerRenderer); - }, this); }; diff --git a/src/ol/webgl/tilelayerrenderer.js b/src/ol/webgl/tilelayerrenderer.js index f4745c1abf..23a000f554 100644 --- a/src/ol/webgl/tilelayerrenderer.js +++ b/src/ol/webgl/tilelayerrenderer.js @@ -148,6 +148,16 @@ ol.webgl.TileLayerRenderer.prototype.disposeInternal = function() { }; +/** + */ +ol.webgl.TileLayerRenderer.prototype.handleContextLost = function() { + this.texture_ = null; + this.renderbuffer_ = null; + this.framebuffer_ = null; + this.framebufferSize_ = null; +}; + + /** * @protected */