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
+1 -1
View File
@@ -153,6 +153,6 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
this.renderedVisible_ = true; this.renderedVisible_ = true;
} }
this.removeUnusedLayerRenderers(frameState); this.scheduleRemoveUnusedLayerRenderers(frameState);
}; };
+1 -1
View File
@@ -93,6 +93,6 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) {
} }
this.calculateMatrices2D(frameState); this.calculateMatrices2D(frameState);
this.removeUnusedLayerRenderers(frameState); this.scheduleRemoveUnusedLayerRenderers(frameState);
}; };
+23 -12
View File
@@ -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));
} }
}; };
+1 -1
View File
@@ -641,6 +641,6 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
frameState.animate = true; frameState.animate = true;
} }
this.removeUnusedLayerRenderers(frameState); this.scheduleRemoveUnusedLayerRenderers(frameState);
}; };