diff --git a/vtm/src/org/oscim/renderer/elements/ElementLayers.java b/vtm/src/org/oscim/renderer/elements/ElementLayers.java index 4e23850b..838475b0 100644 --- a/vtm/src/org/oscim/renderer/elements/ElementLayers.java +++ b/vtm/src/org/oscim/renderer/elements/ElementLayers.java @@ -267,10 +267,28 @@ public class ElementLayers extends TileData { public void compile(ShortBuffer sbuf, boolean addFill) { - addLayerItems(sbuf, baseLayers, POLYGON, addFill ? 4 : 0); + int pos = addFill ? 4 : 0; + + for (RenderElement l = baseLayers; l != null; l = l.next) { + if (l.type == POLYGON) { + l.compile(sbuf); + + //log.debug("offset {} {}", l.offset, pos); + l.offset = pos; + pos += l.numVertices; + } + } offset[LINE] = sbuf.position() * SHORT_BYTES; - addLayerItems(sbuf, baseLayers, LINE, 0); + pos = 0; + for (RenderElement l = baseLayers; l != null; l = l.next) { + if (l.type == LINE) { + l.compile(sbuf); + + l.offset = pos; + pos += l.numVertices; + } + } //offset[TEXLINE] = size * SHORT_BYTES; @@ -285,34 +303,6 @@ public class ElementLayers extends TileData { } } - /** - * optimization for Line- and PolygonLayer: - * collect all pool items and add back in one go. - */ - private static int addLayerItems(ShortBuffer sbuf, RenderElement l, - int type, int pos) { - - int size = 0; - - for (; l != null; l = l.next) { - if (l.type != type) - continue; - - size += l.vertexItems.compile(sbuf); - - l.offset = pos; - pos += l.numVertices; - } - return size; - } - - static void addPoolItems(RenderElement l, ShortBuffer sbuf) { - - /* keep offset of layer data in vbo */ - l.offset = sbuf.position() * SHORT_BYTES; - l.vertexItems.compile(sbuf); - } - public void setFrom(ElementLayers layers) { setBaseLayers(layers.baseLayers); setTextureLayers((TextureLayer) layers.textureLayers); diff --git a/vtm/src/org/oscim/renderer/elements/LineTexLayer.java b/vtm/src/org/oscim/renderer/elements/LineTexLayer.java index dc69ba2a..db730c56 100644 --- a/vtm/src/org/oscim/renderer/elements/LineTexLayer.java +++ b/vtm/src/org/oscim/renderer/elements/LineTexLayer.java @@ -224,7 +224,7 @@ public final class LineTexLayer extends RenderElement { @Override protected void compile(ShortBuffer sbuf) { - ElementLayers.addPoolItems(this, sbuf); + compileVertexItems(sbuf); /* add additional vertex for interleaving, see TexLineLayer. */ sbuf.position(sbuf.position() + 6); } diff --git a/vtm/src/org/oscim/renderer/elements/MeshLayer.java b/vtm/src/org/oscim/renderer/elements/MeshLayer.java index ecafcc36..e4c788d0 100644 --- a/vtm/src/org/oscim/renderer/elements/MeshLayer.java +++ b/vtm/src/org/oscim/renderer/elements/MeshLayer.java @@ -73,7 +73,7 @@ public class MeshLayer extends RenderElement { } /* add vertices to shared VBO */ - ElementLayers.addPoolItems(this, sbuf); + ElementLayers.compileVertexItems(this, sbuf); /* add indices to indicesVbo */ sbuf = MapRenderer.getShortBuffer(numIndices); diff --git a/vtm/src/org/oscim/renderer/elements/RenderElement.java b/vtm/src/org/oscim/renderer/elements/RenderElement.java index 7c6706e2..5eb1f86c 100644 --- a/vtm/src/org/oscim/renderer/elements/RenderElement.java +++ b/vtm/src/org/oscim/renderer/elements/RenderElement.java @@ -55,7 +55,7 @@ public abstract class RenderElement extends Inlist { /** compile vertex data to vbo. */ protected void compile(ShortBuffer sbuf) { - + compileVertexItems(sbuf); } public int getOffset() { @@ -76,4 +76,11 @@ public abstract class RenderElement extends Inlist { protected void compile(ShortBuffer vertexBuffer, ShortBuffer indexBuffer) { } + + protected void compileVertexItems(ShortBuffer sbuf) { + /* keep offset of layer data in vbo */ + offset = sbuf.position() * 2; + vertexItems.compile(sbuf); + } + } diff --git a/vtm/src/org/oscim/renderer/elements/TextureLayer.java b/vtm/src/org/oscim/renderer/elements/TextureLayer.java index 1191136e..1ffe3bbb 100644 --- a/vtm/src/org/oscim/renderer/elements/TextureLayer.java +++ b/vtm/src/org/oscim/renderer/elements/TextureLayer.java @@ -63,7 +63,7 @@ public abstract class TextureLayer extends RenderElement { t.upload(); /* add vertices to vbo */ - ElementLayers.addPoolItems(this, sbuf); + compileVertexItems(sbuf); } abstract public boolean prepare();