From 80624a5d0623b5329890c4edacc256b52c9d1e2b Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 4 Aug 2013 14:35:31 +0200 Subject: [PATCH] fix draw label-only tiles (set MapTile state ready when there are no baselayer items) --- .../org/oscim/layers/tile/TileRenderLayer.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/vtm/src/org/oscim/layers/tile/TileRenderLayer.java b/vtm/src/org/oscim/layers/tile/TileRenderLayer.java index 99d30910..cdb7bf5c 100644 --- a/vtm/src/org/oscim/layers/tile/TileRenderLayer.java +++ b/vtm/src/org/oscim/layers/tile/TileRenderLayer.java @@ -48,7 +48,7 @@ public class TileRenderLayer extends RenderLayer { @Override public void update(MapPosition pos, boolean positionChanged, Matrices m) { - mMapPosition.copy(pos); + //mMapPosition.copy(pos); boolean tilesChanged; synchronized (tilelock) { @@ -63,8 +63,9 @@ public class TileRenderLayer extends RenderLayer { MapTile[] tiles = mDrawTiles.tiles; if (tilesChanged || positionChanged){ - updateTileVisibility(m.mapPlane); + updateTileVisibility(pos, m.mapPlane); } + tileCnt += mNumTileHolder; /* prepare tile for rendering */ @@ -146,8 +147,9 @@ public class TileRenderLayer extends RenderLayer { private static int uploadTileData(MapTile tile) { tile.state = STATE_READY; + // tile might contain extrusion or label layers if (tile.layers == null) - return 0; + return 1; int newSize = tile.layers.getSize(); if (newSize > 0) { @@ -165,17 +167,17 @@ public class TileRenderLayer extends RenderLayer { return 0; } } + return 1; } private final Object tilelock = new Object(); /** set tile isVisible flag true for tiles that intersect view */ - private void updateTileVisibility(float[] box) { + private void updateTileVisibility(MapPosition pos, float[] box) { // lock tiles while updating isVisible state synchronized (tilelock) { - MapPosition pos = mMapPosition; MapTile[] tiles = mDrawTiles.tiles; int tileZoom = tiles[0].zoomLevel; @@ -313,6 +315,10 @@ public class TileRenderLayer extends RenderLayer { if (tile == null) continue; + if (cnt + mNumTileHolder >= tiles.length){ + Log.e(TAG, "too many tiles " + cnt + ", " + mNumTileHolder); + break; + } holder = new MapTile(x, y, (byte) mZoom); holder.isVisible = true; holder.holder = tile;