diff options
author | Chris Loer <chris.loer@gmail.com> | 2018-09-06 14:58:37 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@mapbox.com> | 2018-09-12 14:10:46 -0700 |
commit | d735d89835fb3076e09594fce2a141fe1495e33f (patch) | |
tree | 36fb80484b3952fb730fd34a77439d303d002cdc /src/mbgl/text/placement.hpp | |
parent | 079ba0209ed383c15123902f0810e658c2b0abf4 (diff) | |
download | qtlocation-mapboxgl-d735d89835fb3076e09594fce2a141fe1495e33f.tar.gz |
[core] Port "collision group" plumbing to gl-native.
[node] Hook up map-wide "crossSourceCollisions" option, defaulting to true.
[test] Pass "crossSourceCollisions" test option through test harness; enable cross-source-collisions tests on native.
Diffstat (limited to 'src/mbgl/text/placement.hpp')
-rw-r--r-- | src/mbgl/text/placement.hpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index 24de4c054a..8527d6df57 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -59,9 +59,27 @@ struct RetainedQueryData { , tileID(std::move(tileID_)) {} }; +class CollisionGroups { +public: + using Predicate = std::function<bool(const IndexedSubfeature&)>; + using CollisionGroup = std::pair<uint16_t, optional<Predicate>>; + + CollisionGroups(const bool crossSourceCollisions_) + : maxGroupID(0) + , crossSourceCollisions(crossSourceCollisions_) + {} + + const CollisionGroup& get(const std::string& sourceID); + +private: + std::map<std::string, CollisionGroup> collisionGroups; + uint16_t maxGroupID; + bool crossSourceCollisions; +}; + class Placement { public: - Placement(const TransformState&, MapMode mapMode); + Placement(const TransformState&, MapMode mapMode, const bool crossSourceCollisions); void placeLayer(RenderSymbolLayer&, const mat4&, bool showCollisionBoxes); void commit(const Placement& prevPlacement, TimePoint); void updateLayerOpacities(RenderSymbolLayer&); @@ -86,7 +104,8 @@ private: const float pixelRatio, const bool showCollisionBoxes, std::unordered_set<uint32_t>& seenCrossTileIDs, - const bool holdingForFade); + const bool holdingForFade, + const CollisionGroups::CollisionGroup& collisionGroup); void updateBucketOpacities(SymbolBucket&, std::set<uint32_t>&); @@ -103,6 +122,7 @@ private: bool stale = false; std::unordered_map<uint32_t, RetainedQueryData> retainedQueryData; + CollisionGroups collisionGroups; }; } // namespace mbgl |