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;
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++) {
MapTile ci = t.node.child(c);
if (ci == null)
continue;
if (ci.fadeTime > 0 && ci.fadeTime < minFade)
minFade = ci.fadeTime;
if (ci.state == READY || ci.fadeTime > 0)
minFade = Math.min(minFade, ci.fadeTime);
/* when drawing the parent of the current level
* 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 (p == null)
return minFade;
if (p.state == READY || p.fadeTime > 0)
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 >= -1) {
MapTile p = t.node.parent();
if (p != null) {
if (p.fadeTime > 0 && p.fadeTime < minFade)
minFade = p.fadeTime;
if (proxyLevel >= 0) {
if ((p = p.node.parent()) != null) {
if (p.fadeTime > 0 && p.fadeTime < minFade)
minFade = p.fadeTime;
}
}
}
}
return minFade;
}
}

View File

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