From 9ceb619940901d06909f7d6d0fc4a4e64572d228 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Thu, 23 Apr 2020 16:16:24 +0300 Subject: [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) --- src/mbgl/renderer/tile_pyramid.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) 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>& 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 -- cgit v1.2.1