diff --git a/src/org/oscim/renderer/layer/ExtrusionLayer.java b/src/org/oscim/renderer/layer/ExtrusionLayer.java index 03c332aa..d56bac0e 100644 --- a/src/org/oscim/renderer/layer/ExtrusionLayer.java +++ b/src/org/oscim/renderer/layer/ExtrusionLayer.java @@ -37,7 +37,6 @@ import android.util.Log; public class ExtrusionLayer extends Layer { private final static String TAG = ExtrusionLayer.class.getName(); private static final float S = GLRenderer.COORD_SCALE; - private int mNumVertices = 0; private final VertexPoolItem mVertices; private VertexPoolItem mCurVertices; private final VertexPoolItem mIndices[], mCurIndices[]; @@ -47,6 +46,7 @@ public class ExtrusionLayer extends Layer { // 0. even sides, 1. odd sides, 2. roof, 3. roof outline public int mIndiceCnt[] = { 0, 0, 0, 0 }; public int mNumIndices = 0; + public int mNumVertices = 0; public int mIndicesBufferID; public int mVertexBufferID; @@ -341,7 +341,6 @@ public class ExtrusionLayer extends Layer { } mCurVertices.used = v; - mNumVertices += vertexCnt; return convex; } diff --git a/src/org/oscim/renderer/overlays/ExtrusionOverlay.java b/src/org/oscim/renderer/overlays/ExtrusionOverlay.java index 13ebb3ad..3e2de3a3 100644 --- a/src/org/oscim/renderer/overlays/ExtrusionOverlay.java +++ b/src/org/oscim/renderer/overlays/ExtrusionOverlay.java @@ -55,7 +55,7 @@ public class ExtrusionOverlay extends RenderOverlay { private boolean initialized = false; // FIXME sum up size used while filling layer only up to: - private final int BUFFERSIZE = 65536 * 2; + public int mBufferSize = 65536; private TileSet mTileSet; private ShortBuffer mShortBuffer; private MapTile[] mTiles; @@ -86,7 +86,7 @@ public class ExtrusionOverlay extends RenderOverlay { hLightPosition[i] = GLES20.glGetAttribLocation(shaderProgram[i], "a_light"); } - ByteBuffer buf = ByteBuffer.allocateDirect(BUFFERSIZE) + ByteBuffer buf = ByteBuffer.allocateDirect(mBufferSize) .order(ByteOrder.nativeOrder()); mShortBuffer = buf.asShortBuffer(); @@ -116,6 +116,15 @@ public class ExtrusionOverlay extends RenderOverlay { continue; if (!el.compiled) { + int verticesBytes = el.mNumVertices * 8 * 2; + if (verticesBytes > mBufferSize) { + mBufferSize = verticesBytes; + Log.d(TAG, "realloc extrusion buffer " + verticesBytes); + ByteBuffer buf = ByteBuffer.allocateDirect(verticesBytes) + .order(ByteOrder.nativeOrder()); + + mShortBuffer = buf.asShortBuffer(); + } el.compile(mShortBuffer); GlUtils.checkGlError("..."); }