diff options
author | Juha Alanen <juha.alanen@mapbox.com> | 2019-09-05 15:28:27 +0300 |
---|---|---|
committer | Juha Alanen <juha.alanen@mapbox.com> | 2019-09-09 16:30:47 +0300 |
commit | 89a8715d659b19c88151ac564c3dabfda4f7f036 (patch) | |
tree | 3a75173d3dfadfc5ccdd6700c83649b87075dce4 | |
parent | b482d1b216e248c555d5a03c44980c259e4b429b (diff) | |
download | qtlocation-mapboxgl-89a8715d659b19c88151ac564c3dabfda4f7f036.tar.gz |
[core] Add API to control prefetching tiles beyond the current zoom level
-rw-r--r-- | include/mbgl/map/map.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/algorithm/update_renderables.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/map/map_impl.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/map/map_impl.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_parameters.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/update_parameters.hpp | 3 |
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; |