From 774dd43a18f604cb01011ee79f29e0a0ada3431f Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sat, 24 May 2014 19:48:55 +0200 Subject: [PATCH] add min/max tile zoom to ExtrusionRenderer --- .../org/oscim/layers/tile/s3db/S3DBLayer.java | 4 +-- .../layers/tile/vector/BuildingLayer.java | 15 +++++++--- .../org/oscim/renderer/ExtrusionRenderer.java | 30 +++++++++---------- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/vtm/src/org/oscim/layers/tile/s3db/S3DBLayer.java b/vtm/src/org/oscim/layers/tile/s3db/S3DBLayer.java index d260fad3..ceff241a 100644 --- a/vtm/src/org/oscim/layers/tile/s3db/S3DBLayer.java +++ b/vtm/src/org/oscim/layers/tile/s3db/S3DBLayer.java @@ -19,7 +19,7 @@ public class S3DBLayer extends TileLayer { static final Logger log = LoggerFactory.getLogger(S3DBLayer.class); static final boolean POST_FXAA = false; - private final static int MAX_CACHE = 20; + private final static int MAX_CACHE = 32; private final static int SRC_ZOOM = 16; /* TODO get from theme */ @@ -47,7 +47,7 @@ public class S3DBLayer extends TileLayer { OffscreenRenderer or; public S3DBRenderer() { - mExtRenderer = new ExtrusionRenderer(this, 16, true, false); + mExtRenderer = new ExtrusionRenderer(this, SRC_ZOOM, SRC_ZOOM, true, false); if (POST_FXAA) { or = new OffscreenRenderer(Mode.FXAA); or.setRenderer(mExtRenderer); diff --git a/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java b/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java index 75a17156..964bbbe2 100644 --- a/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java +++ b/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java @@ -40,15 +40,18 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook { static final Logger log = LoggerFactory.getLogger(BuildingLayer.class); private final static int MIN_ZOOM = 17; + private final static int MAX_ZOOM = 17; private final static boolean POST_AA = false; private final int mMinZoom; + private final int mMaxZoom; + private ExtrusionRenderer mExtRenderer; private final float mFadeTime = 300; public BuildingLayer(Map map, VectorTileLayer tileLayer) { - this(map, tileLayer, MIN_ZOOM); + this(map, tileLayer, MIN_ZOOM, MAX_ZOOM); // super(map); // tileLayer.addHook(this); @@ -60,12 +63,16 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook { // mRenderer = or; } - public BuildingLayer(Map map, VectorTileLayer tileLayer, int minZoom) { + public BuildingLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax) { super(map); tileLayer.addHook(this); - mMinZoom = minZoom; - mExtRenderer = new ExtrusionRenderer(tileLayer.tileRenderer(), mMinZoom) { + mMinZoom = zoomMin; + mMaxZoom = zoomMax; + + mExtRenderer = new ExtrusionRenderer(tileLayer.tileRenderer(), + mMinZoom, mMaxZoom, + false, true) { private long mStartTime; @Override diff --git a/vtm/src/org/oscim/renderer/ExtrusionRenderer.java b/vtm/src/org/oscim/renderer/ExtrusionRenderer.java index 1c6aaf89..9b1682d6 100644 --- a/vtm/src/org/oscim/renderer/ExtrusionRenderer.java +++ b/vtm/src/org/oscim/renderer/ExtrusionRenderer.java @@ -38,25 +38,20 @@ public class ExtrusionRenderer extends LayerRenderer { static final Logger log = LoggerFactory.getLogger(ExtrusionRenderer.class); private final TileRenderer mTileLayer; - private final int mTileZoom; + private final int mZoomMin; + private final int mZoomMax; private final boolean drawAlpha; protected float mAlpha = 1; - public ExtrusionRenderer(TileRenderer tileRenderLayer, int tileZoom) { + public ExtrusionRenderer(TileRenderer tileRenderLayer, + int zoomMin, int zoomMax, boolean mesh, boolean alpha) { mTileLayer = tileRenderLayer; mTileSet = new TileSet(); - mTileZoom = tileZoom; - mMode = 0; - drawAlpha = true; - } - - public ExtrusionRenderer(TileRenderer tileRenderLayer, int tileZoom, boolean mesh, boolean alpha) { - mTileLayer = tileRenderLayer; - mTileSet = new TileSet(); - mTileZoom = tileZoom; + mZoomMin = zoomMin; + mZoomMax = zoomMax; mMode = mesh ? 1 : 0; - drawAlpha = false; //alpha; + drawAlpha = alpha; } private boolean initialized = false; @@ -100,7 +95,7 @@ public class ExtrusionRenderer extends LayerRenderer { if (!initialized && !initShader()) return; - if (mAlpha == 0 || v.pos.zoomLevel < (mTileZoom - 1)) { + if (mAlpha == 0 || v.pos.zoomLevel < (mZoomMin - 1)) { setReady(false); return; } @@ -124,7 +119,9 @@ public class ExtrusionRenderer extends LayerRenderer { /* compile one tile max per frame */ boolean compiled = false; - if (zoom == mTileZoom) { + if (zoom >= mZoomMin && zoom <= mZoomMax) { + // TODO - if tile is not available try parent or children + for (int i = 0; i < mTileSet.cnt; i++) { ExtrusionLayer el = getLayer(tiles[i]); if (el == null) @@ -137,7 +134,8 @@ public class ExtrusionRenderer extends LayerRenderer { compiled = true; } } - } else if (zoom == mTileZoom + 1) { + } else if (zoom == mZoomMax + 1) { + /* special case for s3db: render from parent tiles */ O: for (int i = 0; i < mTileSet.cnt; i++) { MapTile t = tiles[i].node.parent(); @@ -160,7 +158,7 @@ public class ExtrusionRenderer extends LayerRenderer { compiled = true; } } - } else if (zoom == mTileZoom - 1) { + } else if (zoom == mZoomMin - 1) { /* check if proxy children are ready */ for (int i = 0; i < mTileSet.cnt; i++) { MapTile t = tiles[i];