add min/max tile zoom to ExtrusionRenderer

This commit is contained in:
Hannes Janetzek 2014-05-24 19:48:55 +02:00
parent 1a22a39991
commit 774dd43a18
3 changed files with 27 additions and 22 deletions

View File

@ -19,7 +19,7 @@ public class S3DBLayer extends TileLayer {
static final Logger log = LoggerFactory.getLogger(S3DBLayer.class); static final Logger log = LoggerFactory.getLogger(S3DBLayer.class);
static final boolean POST_FXAA = false; 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; private final static int SRC_ZOOM = 16;
/* TODO get from theme */ /* TODO get from theme */
@ -47,7 +47,7 @@ public class S3DBLayer extends TileLayer {
OffscreenRenderer or; OffscreenRenderer or;
public S3DBRenderer() { public S3DBRenderer() {
mExtRenderer = new ExtrusionRenderer(this, 16, true, false); mExtRenderer = new ExtrusionRenderer(this, SRC_ZOOM, SRC_ZOOM, true, false);
if (POST_FXAA) { if (POST_FXAA) {
or = new OffscreenRenderer(Mode.FXAA); or = new OffscreenRenderer(Mode.FXAA);
or.setRenderer(mExtRenderer); or.setRenderer(mExtRenderer);

View File

@ -40,15 +40,18 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
static final Logger log = LoggerFactory.getLogger(BuildingLayer.class); static final Logger log = LoggerFactory.getLogger(BuildingLayer.class);
private final static int MIN_ZOOM = 17; private final static int MIN_ZOOM = 17;
private final static int MAX_ZOOM = 17;
private final static boolean POST_AA = false; private final static boolean POST_AA = false;
private final int mMinZoom; private final int mMinZoom;
private final int mMaxZoom;
private ExtrusionRenderer mExtRenderer; private ExtrusionRenderer mExtRenderer;
private final float mFadeTime = 300; private final float mFadeTime = 300;
public BuildingLayer(Map map, VectorTileLayer tileLayer) { public BuildingLayer(Map map, VectorTileLayer tileLayer) {
this(map, tileLayer, MIN_ZOOM); this(map, tileLayer, MIN_ZOOM, MAX_ZOOM);
// super(map); // super(map);
// tileLayer.addHook(this); // tileLayer.addHook(this);
@ -60,12 +63,16 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
// mRenderer = or; // mRenderer = or;
} }
public BuildingLayer(Map map, VectorTileLayer tileLayer, int minZoom) { public BuildingLayer(Map map, VectorTileLayer tileLayer, int zoomMin, int zoomMax) {
super(map); super(map);
tileLayer.addHook(this); tileLayer.addHook(this);
mMinZoom = minZoom; mMinZoom = zoomMin;
mExtRenderer = new ExtrusionRenderer(tileLayer.tileRenderer(), mMinZoom) { mMaxZoom = zoomMax;
mExtRenderer = new ExtrusionRenderer(tileLayer.tileRenderer(),
mMinZoom, mMaxZoom,
false, true) {
private long mStartTime; private long mStartTime;
@Override @Override

View File

@ -38,25 +38,20 @@ public class ExtrusionRenderer extends LayerRenderer {
static final Logger log = LoggerFactory.getLogger(ExtrusionRenderer.class); static final Logger log = LoggerFactory.getLogger(ExtrusionRenderer.class);
private final TileRenderer mTileLayer; private final TileRenderer mTileLayer;
private final int mTileZoom; private final int mZoomMin;
private final int mZoomMax;
private final boolean drawAlpha; private final boolean drawAlpha;
protected float mAlpha = 1; protected float mAlpha = 1;
public ExtrusionRenderer(TileRenderer tileRenderLayer, int tileZoom) { public ExtrusionRenderer(TileRenderer tileRenderLayer,
int zoomMin, int zoomMax, boolean mesh, boolean alpha) {
mTileLayer = tileRenderLayer; mTileLayer = tileRenderLayer;
mTileSet = new TileSet(); mTileSet = new TileSet();
mTileZoom = tileZoom; mZoomMin = zoomMin;
mMode = 0; mZoomMax = zoomMax;
drawAlpha = true;
}
public ExtrusionRenderer(TileRenderer tileRenderLayer, int tileZoom, boolean mesh, boolean alpha) {
mTileLayer = tileRenderLayer;
mTileSet = new TileSet();
mTileZoom = tileZoom;
mMode = mesh ? 1 : 0; mMode = mesh ? 1 : 0;
drawAlpha = false; //alpha; drawAlpha = alpha;
} }
private boolean initialized = false; private boolean initialized = false;
@ -100,7 +95,7 @@ public class ExtrusionRenderer extends LayerRenderer {
if (!initialized && !initShader()) if (!initialized && !initShader())
return; return;
if (mAlpha == 0 || v.pos.zoomLevel < (mTileZoom - 1)) { if (mAlpha == 0 || v.pos.zoomLevel < (mZoomMin - 1)) {
setReady(false); setReady(false);
return; return;
} }
@ -124,7 +119,9 @@ public class ExtrusionRenderer extends LayerRenderer {
/* compile one tile max per frame */ /* compile one tile max per frame */
boolean compiled = false; 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++) { for (int i = 0; i < mTileSet.cnt; i++) {
ExtrusionLayer el = getLayer(tiles[i]); ExtrusionLayer el = getLayer(tiles[i]);
if (el == null) if (el == null)
@ -137,7 +134,8 @@ public class ExtrusionRenderer extends LayerRenderer {
compiled = true; 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++) { O: for (int i = 0; i < mTileSet.cnt; i++) {
MapTile t = tiles[i].node.parent(); MapTile t = tiles[i].node.parent();
@ -160,7 +158,7 @@ public class ExtrusionRenderer extends LayerRenderer {
compiled = true; compiled = true;
} }
} }
} else if (zoom == mTileZoom - 1) { } else if (zoom == mZoomMin - 1) {
/* check if proxy children are ready */ /* check if proxy children are ready */
for (int i = 0; i < mTileSet.cnt; i++) { for (int i = 0; i < mTileSet.cnt; i++) {
MapTile t = tiles[i]; MapTile t = tiles[i];