summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuha Alanen <juha.alanen@mapbox.com>2019-09-05 15:28:27 +0300
committerJuha Alanen <juha.alanen@mapbox.com>2019-09-09 16:30:47 +0300
commit89a8715d659b19c88151ac564c3dabfda4f7f036 (patch)
tree3a75173d3dfadfc5ccdd6700c83649b87075dce4
parentb482d1b216e248c555d5a03c44980c259e4b429b (diff)
downloadqtlocation-mapboxgl-89a8715d659b19c88151ac564c3dabfda4f7f036.tar.gz
[core] Add API to control prefetching tiles beyond the current zoom level
-rw-r--r--include/mbgl/map/map.hpp2
-rw-r--r--src/mbgl/algorithm/update_renderables.hpp5
-rw-r--r--src/mbgl/map/map.cpp8
-rw-r--r--src/mbgl/map/map_impl.cpp1
-rw-r--r--src/mbgl/map/map_impl.hpp1
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp3
-rw-r--r--src/mbgl/renderer/tile_parameters.hpp1
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp4
-rw-r--r--src/mbgl/renderer/update_parameters.hpp3
9 files changed, 22 insertions, 6 deletions
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp
index ac0a398d25..300ec15126 100644
--- a/include/mbgl/map/map.hpp
+++ b/include/mbgl/map/map.hpp
@@ -115,6 +115,8 @@ public:
// default `delta` is 4.
void setPrefetchZoomDelta(uint8_t delta);
uint8_t getPrefetchZoomDelta() const;
+ void setPrefetchParentTiles(bool enable);
+ bool getPrefetchParentTiles() const;
// Debug
void setDebug(MapDebugOptions);
diff --git a/src/mbgl/algorithm/update_renderables.hpp b/src/mbgl/algorithm/update_renderables.hpp
index 57cd4f41ec..608c0a99bc 100644
--- a/src/mbgl/algorithm/update_renderables.hpp
+++ b/src/mbgl/algorithm/update_renderables.hpp
@@ -20,7 +20,8 @@ void updateRenderables(GetTileFn getTile,
RenderTileFn renderTile,
const IdealTileIDs& idealTileIDs,
const Range<uint8_t>& zoomRange,
- const uint8_t dataTileZoom) {
+ const uint8_t dataTileZoom,
+ const bool prefetchParentTiles) {
std::unordered_set<OverscaledTileID> checked;
bool covered;
int32_t overscaledZ;
@@ -81,7 +82,7 @@ void updateRenderables(GetTileFn getTile,
}
}
- if (!covered) {
+ if (!covered && prefetchParentTiles) {
// We couldn't find child tiles that entirely cover the ideal tile.
for (overscaledZ = dataTileZoom - 1; overscaledZ >= zoomRange.min; --overscaledZ) {
const auto parentDataTileID = idealDataTileID.scaledTo(overscaledZ);
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 649e0e321e..b1e06e6db5 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -452,6 +452,14 @@ uint8_t Map::getPrefetchZoomDelta() const {
return impl->prefetchZoomDelta;
}
+void Map::setPrefetchParentTiles(bool enable) {
+ impl->prefetchParentTiles = enable;
+}
+
+bool Map::getPrefetchParentTiles() const {
+ return impl->prefetchParentTiles;
+}
+
bool Map::isFullyLoaded() const {
return impl->style->impl->isLoaded() && impl->rendererFullyLoaded;
}
diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp
index ea55dfd1a8..ee25e17d96 100644
--- a/src/mbgl/map/map_impl.cpp
+++ b/src/mbgl/map/map_impl.cpp
@@ -65,6 +65,7 @@ void Map::Impl::onUpdate() {
annotationManager,
fileSource,
prefetchZoomDelta,
+ prefetchParentTiles,
bool(stillImageRequest),
crossSourceCollisions
};
diff --git a/src/mbgl/map/map_impl.hpp b/src/mbgl/map/map_impl.hpp
index 416662f9e5..42b5420968 100644
--- a/src/mbgl/map/map_impl.hpp
+++ b/src/mbgl/map/map_impl.hpp
@@ -70,6 +70,7 @@ public:
bool cameraMutated = false;
uint8_t prefetchZoomDelta = util::DEFAULT_PREFETCH_ZOOM_DELTA;
+ bool prefetchParentTiles = true;
bool loading = false;
bool rendererFullyLoaded;
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index 983bc09485..a41df00aa2 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -159,7 +159,8 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
updateParameters.annotationManager,
*imageManager,
*glyphManager,
- updateParameters.prefetchZoomDelta
+ updateParameters.prefetchZoomDelta,
+ updateParameters.prefetchParentTiles
};
glyphManager->setURL(updateParameters.glyphURL);
diff --git a/src/mbgl/renderer/tile_parameters.hpp b/src/mbgl/renderer/tile_parameters.hpp
index 6a2deee35c..a095154ff5 100644
--- a/src/mbgl/renderer/tile_parameters.hpp
+++ b/src/mbgl/renderer/tile_parameters.hpp
@@ -23,6 +23,7 @@ public:
ImageManager& imageManager;
GlyphManager& glyphManager;
const uint8_t prefetchZoomDelta;
+ const bool prefetchParentTiles;
};
} // namespace mbgl
diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp
index 54e0b1eb26..07a066b4ba 100644
--- a/src/mbgl/renderer/tile_pyramid.cpp
+++ b/src/mbgl/renderer/tile_pyramid.cpp
@@ -170,11 +170,11 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l
if (!panTiles.empty()) {
algorithm::updateRenderables(getTileFn, createTileFn, retainTileFn,
- [](const UnwrappedTileID&, Tile&) {}, panTiles, zoomRange, panZoom);
+ [](const UnwrappedTileID&, Tile&) {}, panTiles, zoomRange, panZoom, parameters.prefetchParentTiles);
}
algorithm::updateRenderables(getTileFn, createTileFn, retainTileFn, renderTileFn,
- idealTiles, zoomRange, tileZoom);
+ idealTiles, zoomRange, tileZoom, parameters.prefetchParentTiles);
for (auto previouslyRenderedTile : previouslyRenderedTiles) {
Tile& tile = previouslyRenderedTile.second;
diff --git a/src/mbgl/renderer/update_parameters.hpp b/src/mbgl/renderer/update_parameters.hpp
index b7aee9b572..ddf4316ce3 100644
--- a/src/mbgl/renderer/update_parameters.hpp
+++ b/src/mbgl/renderer/update_parameters.hpp
@@ -37,7 +37,8 @@ public:
std::shared_ptr<FileSource> fileSource;
const uint8_t prefetchZoomDelta;
-
+ const bool prefetchParentTiles;
+
// For still image requests, render requested
const bool stillImageRequest;