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; return textLayer;
} }
/**
* Set new Base-Layers and clear previous.
*/
public void setBaseLayers(RenderElement layers) { public void setBaseLayers(RenderElement layers) {
for (RenderElement l = baseLayers; l != null; l = l.next) for (RenderElement l = baseLayers; l != null; l = l.next)
l.clear(); l.clear();
@ -158,6 +161,9 @@ public class ElementLayers {
return baseLayers; return baseLayers;
} }
/**
* Set new TextureLayers and clear previous.
*/
public void setTextureLayers(TextureLayer tl) { public void setTextureLayers(TextureLayer tl) {
for (RenderElement l = textureLayers; l != null; l = l.next) for (RenderElement l = textureLayers; l != null; l = l.next)
l.clear(); l.clear();
@ -169,6 +175,9 @@ public class ElementLayers {
return textureLayers; return textureLayers;
} }
/**
* Set new ExtrusionLayers and clear previous.
*/
public void setExtrusionLayers(ExtrusionLayer el) { public void setExtrusionLayers(ExtrusionLayer el) {
for (RenderElement l = extrusionLayers; l != null; l = l.next) for (RenderElement l = extrusionLayers; l != null; l = l.next)
l.clear(); l.clear();
@ -180,17 +189,6 @@ public class ElementLayers {
return (ExtrusionLayer) extrusionLayers; 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) { private RenderElement getLayer(int level, int type) {
RenderElement layer = null; RenderElement layer = null;
@ -364,15 +362,28 @@ public class ElementLayers {
} }
public void setFrom(ElementLayers layers) { public void setFrom(ElementLayers layers) {
baseLayers = layers.baseLayers; setBaseLayers(layers.baseLayers);
textureLayers = layers.textureLayers; setTextureLayers((TextureLayer) layers.textureLayers);
extrusionLayers = layers.extrusionLayers; setExtrusionLayers((ExtrusionLayer) layers.extrusionLayers);
mCurLayer = null;
mCurLayer = null;
layers.baseLayers = null; layers.baseLayers = null;
layers.textureLayers = null; layers.textureLayers = null;
layers.extrusionLayers = null; layers.extrusionLayers = null;
layers.mCurLayer = 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);
}
} }