Remove layer renderers in post render function

This commit is contained in:
Tom Payne
2013-04-16 18:16:08 +02:00
parent 4e69b2bb8b
commit 07fe17924b
4 changed files with 26 additions and 15 deletions

View File

@@ -241,24 +241,35 @@ ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
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.
* @protected
*/
ol.renderer.Map.prototype.removeUnusedLayerRenderers =
ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers =
function(frameState) {
var layerRenderersToRemove = {};
var layerKey;
for (layerKey in this.layerRenderers_) {
layerRenderersToRemove[layerKey] = true;
}
var layersArray = frameState.layersArray;
var i;
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));
if (!(layerKey in frameState.layerStates)) {
frameState.postRenderFunctions.push(
goog.bind(this.removeUnusedLayerRenderers_, this));
return;
}
}
};