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 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);
|
||||||
|
@ -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
|
||||||
|
@ -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];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user