Remove layer renderers in post render function
This commit is contained in:
@@ -153,6 +153,6 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
|
|||||||
this.renderedVisible_ = true;
|
this.renderedVisible_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.removeUnusedLayerRenderers(frameState);
|
this.scheduleRemoveUnusedLayerRenderers(frameState);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -93,6 +93,6 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.calculateMatrices2D(frameState);
|
this.calculateMatrices2D(frameState);
|
||||||
this.removeUnusedLayerRenderers(frameState);
|
this.scheduleRemoveUnusedLayerRenderers(frameState);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -241,24 +241,35 @@ ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
|
|||||||
ol.renderer.Map.prototype.renderFrame = goog.nullFunction;
|
ol.renderer.Map.prototype.renderFrame = goog.nullFunction;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.Map} map Map.
|
||||||
|
* @param {!ol.FrameState} frameState Frame state.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.renderer.Map.prototype.removeUnusedLayerRenderers_ =
|
||||||
|
function(map, frameState) {
|
||||||
|
var layerStates = frameState.layerStates;
|
||||||
|
var layerKey;
|
||||||
|
for (layerKey in this.layerRenderers_) {
|
||||||
|
if (!(layerKey in layerStates)) {
|
||||||
|
goog.dispose(this.removeLayerRendererByKey_(layerKey));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {!ol.FrameState} frameState Frame state.
|
* @param {!ol.FrameState} frameState Frame state.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.Map.prototype.removeUnusedLayerRenderers =
|
ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers =
|
||||||
function(frameState) {
|
function(frameState) {
|
||||||
var layerRenderersToRemove = {};
|
|
||||||
var layerKey;
|
var layerKey;
|
||||||
for (layerKey in this.layerRenderers_) {
|
for (layerKey in this.layerRenderers_) {
|
||||||
layerRenderersToRemove[layerKey] = true;
|
if (!(layerKey in frameState.layerStates)) {
|
||||||
}
|
frameState.postRenderFunctions.push(
|
||||||
var layersArray = frameState.layersArray;
|
goog.bind(this.removeUnusedLayerRenderers_, this));
|
||||||
var i;
|
return;
|
||||||
for (i = 0; i < layersArray.length; ++i) {
|
}
|
||||||
layerKey = goog.getUid(layersArray[i]).toString();
|
|
||||||
delete layerRenderersToRemove[layerKey];
|
|
||||||
}
|
|
||||||
for (layerKey in layerRenderersToRemove) {
|
|
||||||
goog.dispose(this.removeLayerRendererByKey_(layerKey));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -641,6 +641,6 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
|
|||||||
frameState.animate = true;
|
frameState.animate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.removeUnusedLayerRenderers(frameState);
|
this.scheduleRemoveUnusedLayerRenderers(frameState);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user