Refactor context lost handling
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user