diff options
Diffstat (limited to 'src/mbgl/renderer/tile_pyramid.cpp')
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index 7a2e691af3..b169fddf9c 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -177,7 +177,7 @@ void TilePyramid::update(const std::vector<Immutable<style::Layer::Impl>>& layer } auto renderTileFn = [&](const UnwrappedTileID& tileID, Tile& tile) { - renderTiles.emplace_back(tileID, tile); + addRenderTile(tileID, tile); rendered.emplace(tileID); previouslyRenderedTiles.erase(tileID); // Still rendering this tile, no need for special fading logic. tile.markRenderedIdeal(); @@ -200,7 +200,7 @@ void TilePyramid::update(const std::vector<Immutable<style::Layer::Impl>>& layer // Since it was rendered in the last frame, we know we have it // Don't mark the tile "Required" to avoid triggering a new network request retainTileFn(tile, TileNecessity::Optional); - renderTiles.emplace_back(previouslyRenderedTile.first, tile); + addRenderTile(previouslyRenderedTile.first, tile); rendered.emplace(previouslyRenderedTile.first); } } @@ -296,7 +296,7 @@ std::unordered_map<std::string, std::vector<Feature>> TilePyramid::queryRendered } mapbox::geometry::box<double> box = mapbox::geometry::envelope(queryGeometry); - + // TODO: Find out why we need a special sorting algorithm here. std::vector<std::reference_wrapper<const RenderTile>> sortedTiles{ renderTiles.begin(), renderTiles.end() }; std::sort(sortedTiles.begin(), sortedTiles.end(), [](const RenderTile& a, const RenderTile& b) { @@ -365,4 +365,16 @@ void TilePyramid::dumpDebugLogs() const { } } +void TilePyramid::clearAll() { + tiles.clear(); + renderTiles.clear(); + cache.clear(); +} + +void TilePyramid::addRenderTile(const UnwrappedTileID& tileID, Tile& tile) { + auto it = std::lower_bound(renderTiles.begin(), renderTiles.end(), tileID, + [](const RenderTile& a, const UnwrappedTileID& id) { return a.id < id; }); + renderTiles.emplace(it, tileID, tile); +} + } // namespace mbgl |