fix: ElementLayers, make sure setFrom() clears previous items

This commit is contained in:
Hannes Janetzek 2014-03-09 05:44:34 +01:00
parent c24b4addfa
commit 5a55e33f76

View File

@ -147,6 +147,9 @@ public class ElementLayers {
return textLayer;
}
/**
* Set new Base-Layers and clear previous.
*/
public void setBaseLayers(RenderElement layers) {
for (RenderElement l = baseLayers; l != null; l = l.next)
l.clear();
@ -158,6 +161,9 @@ public class ElementLayers {
return baseLayers;
}
/**
* Set new TextureLayers and clear previous.
*/
public void setTextureLayers(TextureLayer tl) {
for (RenderElement l = textureLayers; l != null; l = l.next)
l.clear();
@ -169,6 +175,9 @@ public class ElementLayers {
return textureLayers;
}
/**
* Set new ExtrusionLayers and clear previous.
*/
public void setExtrusionLayers(ExtrusionLayer el) {
for (RenderElement l = extrusionLayers; l != null; l = l.next)
l.clear();
@ -180,17 +189,6 @@ public class ElementLayers {
return (ExtrusionLayer) extrusionLayers;
}
/** cleanup only when layers are not used by tile or overlay anymore! */
public void clear() {
setBaseLayers(null);
setTextureLayers(null);
setExtrusionLayers(null);
mCurLayer = null;
if (vbo != null)
vbo = BufferObject.release(vbo);
}
private RenderElement getLayer(int level, int type) {
RenderElement layer = null;
@ -364,15 +362,28 @@ public class ElementLayers {
}
public void setFrom(ElementLayers layers) {
baseLayers = layers.baseLayers;
textureLayers = layers.textureLayers;
extrusionLayers = layers.extrusionLayers;
mCurLayer = null;
setBaseLayers(layers.baseLayers);
setTextureLayers((TextureLayer) layers.textureLayers);
setExtrusionLayers((ExtrusionLayer) layers.extrusionLayers);
mCurLayer = null;
layers.baseLayers = null;
layers.textureLayers = null;
layers.extrusionLayers = null;
layers.mCurLayer = null;
}
/** cleanup only when layers are not used by tile or layer anymore! */
public void clear() {
/* NB: set null calls clear() on each layer! */
setBaseLayers(null);
setTextureLayers(null);
setExtrusionLayers(null);
mCurLayer = null;
if (vbo != null)
vbo = BufferObject.release(vbo);
}
}