diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-05-27 17:01:12 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-06-10 12:42:14 +0200 |
commit | 4e5d0650000a51c3fb76b82d5d4447d74bd788f6 (patch) | |
tree | bd026ce6c69e752153011030d380a1a2cdddbe41 /src/mbgl/algorithm | |
parent | fce5dd5f6afd4864456197a5cfec20a5e8cd0e6a (diff) | |
download | qtlocation-mapboxgl-4e5d0650000a51c3fb76b82d5d4447d74bd788f6.tar.gz |
[core] load parents of missing tiles as optional
Diffstat (limited to 'src/mbgl/algorithm')
-rw-r--r-- | src/mbgl/algorithm/update_renderables.hpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/mbgl/algorithm/update_renderables.hpp b/src/mbgl/algorithm/update_renderables.hpp index 1f58075a58..5ef8e5fbc3 100644 --- a/src/mbgl/algorithm/update_renderables.hpp +++ b/src/mbgl/algorithm/update_renderables.hpp @@ -33,17 +33,19 @@ void updateRenderables(GetTileDataFn getTileData, const OverscaledTileID idealDataTileID(dataTileZoom, idealRenderTileID.canonical); auto data = getTileData(idealDataTileID); if (!data) { - data = createTileData(idealDataTileID, true); + data = createTileData(idealDataTileID); assert(data); } // if (source has the tile and bucket is loaded) { if (data->isRenderable()) { - retainTileData(*data); + retainTileData(*data, true); renderTile(idealRenderTileID, *data); } else { + bool triedPrevious = data->hasTriedOptional(); + // The tile isn't loaded yet, but retain it anyway because it's an ideal tile. - retainTileData(*data); + retainTileData(*data, true); covered = true; overscaledZ = dataTileZoom + 1; if (overscaledZ > info.maxZoom) { @@ -51,7 +53,7 @@ void updateRenderables(GetTileDataFn getTileData, const auto childDataTileID = idealDataTileID.scaledTo(overscaledZ); data = getTileData(childDataTileID); if (data && data->isRenderable()) { - retainTileData(*data); + retainTileData(*data, false); renderTile(idealRenderTileID, *data); } else { covered = false; @@ -62,7 +64,7 @@ void updateRenderables(GetTileDataFn getTileData, const OverscaledTileID childDataTileID(overscaledZ, childTileID); data = getTileData(childDataTileID); if (data && data->isRenderable()) { - retainTileData(*data); + retainTileData(*data, false); renderTile(childDataTileID.unwrapTo(idealRenderTileID.wrap), *data); } else { // At least one child tile doesn't exist, so we are going to look for @@ -88,11 +90,19 @@ void updateRenderables(GetTileDataFn getTileData, } data = getTileData(parentDataTileID); - if (data && data->isRenderable()) { - retainTileData(*data); - renderTile(parentRenderTileID, *data); - // Break parent tile ascent, since we found one. - break; + if (!data && triedPrevious) { + data = createTileData(parentDataTileID); + } + + if (data) { + triedPrevious = data->hasTriedOptional(); + retainTileData(*data, false); + + if (data->isRenderable()) { + renderTile(parentRenderTileID, *data); + // Break parent tile ascent, since we found one. + break; + } } } } |