get correct fade-time for proxy tiles

This commit is contained in:
Hannes Janetzek 2014-06-23 19:03:49 +02:00
parent 2995de938e
commit 51b2773ef2
2 changed files with 38 additions and 28 deletions

View File

@ -349,31 +349,41 @@ public abstract class TileRenderer extends LayerRenderer {
} }
}; };
protected long getMinFade(MapTile t) { protected long getMinFade(MapTile t, int proxyLevel) {
long minFade = MapRenderer.frametime - 50; long minFade = MapRenderer.frametime - 50;
if (proxyLevel <= 0) {
for (int c = 0; c < 4; c++) {
MapTile ci = t.node.child(c);
if (ci == null)
continue;
for (int c = 0; c < 4; c++) { if (ci.fadeTime > 0 && ci.fadeTime < minFade)
MapTile ci = t.node.child(c); minFade = ci.fadeTime;
if (ci == null)
continue;
if (ci.state == READY || ci.fadeTime > 0) /* when drawing the parent of the current level
minFade = Math.min(minFade, ci.fadeTime); * we also check if the children of current level
* are visible */
if (proxyLevel > -2) {
long m = getMinFade(ci, proxyLevel - 1);
if (m < minFade)
minFade = m;
}
}
} }
MapTile p = t.node.parent(); if (proxyLevel >= -1) {
MapTile p = t.node.parent();
if (p == null) if (p != null) {
return minFade; if (p.fadeTime > 0 && p.fadeTime < minFade)
if (p.state == READY || p.fadeTime > 0) minFade = p.fadeTime;
minFade = Math.min(minFade, p.fadeTime);
p = p.node.parent();
if (p == null)
return minFade;
if (p.state == READY || p.fadeTime > 0)
minFade = Math.min(minFade, p.fadeTime);
if (proxyLevel >= 0) {
if ((p = p.node.parent()) != null) {
if (p.fadeTime > 0 && p.fadeTime < minFade)
minFade = p.fadeTime;
}
}
}
}
return minFade; return minFade;
} }
} }

View File

@ -70,7 +70,7 @@ public class VectorTileRenderer extends TileRenderer {
for (int i = 0; i < tileCnt; i++) { for (int i = 0; i < tileCnt; i++) {
MapTile t = tiles[i]; MapTile t = tiles[i];
if (t.isVisible && t.state == READY) if (t.isVisible && t.state == READY)
drawTile(t, v); drawTile(t, v, 0);
} }
@ -111,7 +111,7 @@ public class VectorTileRenderer extends TileRenderer {
} }
private void drawTile(MapTile tile, GLViewport v) { private void drawTile(MapTile tile, GLViewport v, int proxyLevel) {
/* ensure to draw parents only once */ /* ensure to draw parents only once */
if (tile.lastDraw == mDrawSerial) if (tile.lastDraw == mDrawSerial)
return; return;
@ -188,7 +188,7 @@ public class VectorTileRenderer extends TileRenderer {
} }
if (t.fadeTime == 0) if (t.fadeTime == 0)
t.fadeTime = getMinFade(t); t.fadeTime = getMinFade(t, proxyLevel);
if (debugOverdraw) { if (debugOverdraw) {
if (t.zoomLevel > pos.zoomLevel) if (t.zoomLevel > pos.zoomLevel)
@ -219,7 +219,7 @@ public class VectorTileRenderer extends TileRenderer {
MapTile c = tile.node.child(i); MapTile c = tile.node.child(i);
if (c.state == READY) { if (c.state == READY) {
drawTile(c, v); drawTile(c, v, 1);
drawn++; drawn++;
} }
} }
@ -243,7 +243,7 @@ public class VectorTileRenderer extends TileRenderer {
proxy = r.parent.item; proxy = r.parent.item;
if (proxy.state == READY) { if (proxy.state == READY) {
//log.debug("1. draw parent " + proxy); //log.debug("1. draw parent " + proxy);
drawTile(proxy, v); drawTile(proxy, v, -1);
} }
} }
} else if ((tile.proxies & MapTile.PROXY_GRAMPA) != 0) { } else if ((tile.proxies & MapTile.PROXY_GRAMPA) != 0) {
@ -256,7 +256,7 @@ public class VectorTileRenderer extends TileRenderer {
proxy = r.parent.parent.item; proxy = r.parent.parent.item;
if (proxy.state == READY) if (proxy.state == READY)
drawTile(proxy, v); drawTile(proxy, v, -2);
} }
} else { } else {
/* prefer drawing parent */ /* prefer drawing parent */
@ -265,7 +265,7 @@ public class VectorTileRenderer extends TileRenderer {
proxy = r.parent.item; proxy = r.parent.item;
if (proxy != null && proxy.state == READY) { if (proxy != null && proxy.state == READY) {
//log.debug("2. draw parent " + proxy); //log.debug("2. draw parent " + proxy);
drawTile(proxy, v); drawTile(proxy, v, -1);
return; return;
} }
@ -285,7 +285,7 @@ public class VectorTileRenderer extends TileRenderer {
proxy = r.parent.parent.item; proxy = r.parent.parent.item;
if (proxy.state == READY) if (proxy.state == READY)
drawTile(proxy, v); drawTile(proxy, v, -2);
} }
} }
} }