Refactor context lost handling

This commit is contained in:
Tom Payne
2012-07-17 12:00:43 +02:00
parent 495630355a
commit 253d62763f
3 changed files with 19 additions and 13 deletions

View File

@@ -31,6 +31,11 @@ ol.webgl.LayerRenderer.prototype.getGL = function() {
}; };
/**
*/
ol.webgl.LayerRenderer.prototype.handleContextLost = goog.nullFunction;
/** /**
*/ */
ol.webgl.LayerRenderer.prototype.redraw = goog.abstractMethod; ol.webgl.LayerRenderer.prototype.redraw = goog.abstractMethod;

View File

@@ -159,9 +159,6 @@ ol.webgl.Map.createVertexShader_ = function() {
*/ */
ol.webgl.Map.prototype.createLayerRenderer = function(layer) { ol.webgl.Map.prototype.createLayerRenderer = function(layer) {
var gl = this.getGL(); var gl = this.getGL();
if (gl.isContextLost()) {
return null;
}
if (layer instanceof ol.TileLayer) { if (layer instanceof ol.TileLayer) {
return new ol.webgl.TileLayerRenderer(this, layer); return new ol.webgl.TileLayerRenderer(this, layer);
} else { } else {
@@ -353,13 +350,12 @@ ol.webgl.Map.prototype.handleSizeChanged = function() {
*/ */
ol.webgl.Map.prototype.handleWebGLContextLost = function(event) { ol.webgl.Map.prototype.handleWebGLContextLost = function(event) {
event.preventDefault(); 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.shaderCache_ = {};
this.programCache_ = {}; 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.clearColor(1, 0, 0, 1);
gl.disable(goog.webgl.CULL_FACE); gl.disable(goog.webgl.CULL_FACE);
gl.disable(goog.webgl.SCISSOR_TEST); gl.disable(goog.webgl.SCISSOR_TEST);
var layers = this.getLayers();
layers.forEach(function(layer) {
var layerRenderer = this.createLayerRenderer(layer);
this.setLayerRenderer(layer, layerRenderer);
}, this);
}; };

View File

@@ -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 * @protected
*/ */