summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-23 16:16:24 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-24 16:11:46 +0300
commit9ceb619940901d06909f7d6d0fc4a4e64572d228 (patch)
tree42b837b458e76bcad3cf6577a49720ccdf5a755b
parent9f8c9c61e87868510ee2951c93044c4995478641 (diff)
downloadqtlocation-mapboxgl-9ceb619940901d06909f7d6d0fc4a4e64572d228.tar.gz
[core][tile mode] Make sure only a single tile is used
In tile mode, we're supposed to have only one tile, which is achieved with provided camera options. However, if camera options are not accurate enough more tile could be used, which could cause: * various symbol placement problems like, symbol duplications or cut-offs * memory/cpu overhead Now, if `mbgl::tileCover()` returns several tiles, only the first one is used (given that tiles are sorted by the distance to the map center)
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp
index bd22dd81cc..39a9c59283 100644
--- a/src/mbgl/renderer/tile_pyramid.cpp
+++ b/src/mbgl/renderer/tile_pyramid.cpp
@@ -123,6 +123,14 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l
}
idealTiles = util::tileCover(parameters.transformState, idealZoom, tileZoom);
+ if (parameters.mode == MapMode::Tile && type != SourceType::Raster && type != SourceType::RasterDEM &&
+ idealTiles.size() > 1) {
+ mbgl::Log::Warning(mbgl::Event::General,
+ "Provided camera options returned %zu tiles, only %s is taken in Tile mode.",
+ idealTiles.size(),
+ util::toString(idealTiles[0]).c_str());
+ idealTiles = {idealTiles[0]};
+ }
}
// Stores a list of all the tiles that we're definitely going to retain. There are two