add min/max tile zoom to ExtrusionRenderer
This commit is contained in:
parent
1a22a39991
commit
774dd43a18
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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];
|
||||
|
Loading…
x
Reference in New Issue
Block a user