summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/tile_pyramid.cpp
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-01-16 14:35:13 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-01-16 16:16:18 +0200
commitac3d59862a6632de0cd5076ba2a65f4e4a4577f4 (patch)
tree1bd606b14c3ef01413e937df142dc255f2f0066d /src/mbgl/renderer/tile_pyramid.cpp
parente0aeeba10f5d36be010ba773443aa8edd74343f5 (diff)
downloadqtlocation-mapboxgl-ac3d59862a6632de0cd5076ba2a65f4e4a4577f4.tar.gz
[core] TilePyramid has sorted render tiles
Thus we obviate unneeded extra sorting of render tiles at each render layer.
Diffstat (limited to 'src/mbgl/renderer/tile_pyramid.cpp')
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp18
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