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 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);

View File

@ -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

View File

@ -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];