diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-01-06 13:24:33 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-01-10 10:15:22 -0800 |
commit | 40051fb68ec710c5d83795740d0e3e8c75bb3cb3 (patch) | |
tree | e52d31074535b874d4a01b26382ee1ff19e89c14 /src/mbgl/tile | |
parent | f18c0b8d1e4db52c49f7b5980902b4273b69dc33 (diff) | |
download | qtlocation-mapboxgl-40051fb68ec710c5d83795740d0e3e8c75bb3cb3.tar.gz |
[core] Keep symbol and non-symbol buckets segregated
Discard prior symbol buckets only when new symbol buckets became available, in order to eliminate flickering when tiles are refreshed.
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 7 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 2a0047fecf..4c5a61672d 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -6,6 +6,7 @@ #include <mbgl/style/layer_impl.hpp> #include <mbgl/style/layers/background_layer.hpp> #include <mbgl/style/layers/custom_layer.hpp> +#include <mbgl/style/layers/symbol_layer.hpp> #include <mbgl/style/style.hpp> #include <mbgl/storage/file_source.hpp> #include <mbgl/geometry/feature_index.hpp> @@ -105,7 +106,7 @@ void GeometryTile::redoLayout() { void GeometryTile::onLayout(LayoutResult result) { availableData = DataAvailability::Some; - buckets = std::move(result.buckets); + nonSymbolBuckets = std::move(result.nonSymbolBuckets); featureIndex = std::move(result.featureIndex); data = std::move(result.tileData); observer->onTileChanged(*this); @@ -115,9 +116,7 @@ void GeometryTile::onPlacement(PlacementResult result) { if (result.correlationID == correlationID) { availableData = DataAvailability::All; } - for (auto& bucket : result.buckets) { - buckets[bucket.first] = std::move(bucket.second); - } + symbolBuckets = std::move(result.symbolBuckets); featureIndex->setCollisionTile(std::move(result.collisionTile)); observer->onTileChanged(*this); } @@ -128,6 +127,7 @@ void GeometryTile::onError(std::exception_ptr err) { } Bucket* GeometryTile::getBucket(const Layer& layer) { + const auto& buckets = layer.is<SymbolLayer>() ? symbolBuckets : nonSymbolBuckets; const auto it = buckets.find(layer.baseImpl->id); if (it == buckets.end()) { return nullptr; diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 993f7b018e..5e7e501e89 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -50,7 +50,7 @@ public: class LayoutResult { public: - std::unordered_map<std::string, std::shared_ptr<Bucket>> buckets; + std::unordered_map<std::string, std::shared_ptr<Bucket>> nonSymbolBuckets; std::unique_ptr<FeatureIndex> featureIndex; std::unique_ptr<GeometryTileData> tileData; uint64_t correlationID; @@ -59,7 +59,7 @@ public: class PlacementResult { public: - std::unordered_map<std::string, std::shared_ptr<Bucket>> buckets; + std::unordered_map<std::string, std::shared_ptr<Bucket>> symbolBuckets; std::unique_ptr<CollisionTile> collisionTile; uint64_t correlationID; }; @@ -80,7 +80,8 @@ private: uint64_t correlationID = 0; optional<PlacementConfig> requestedConfig; - std::unordered_map<std::string, std::shared_ptr<Bucket>> buckets; + std::unordered_map<std::string, std::shared_ptr<Bucket>> nonSymbolBuckets; + std::unordered_map<std::string, std::shared_ptr<Bucket>> symbolBuckets; std::unique_ptr<FeatureIndex> featureIndex; std::unique_ptr<const GeometryTileData> data; }; |