diff options
author | Mike Morris <michael.patrick.morris@gmail.com> | 2015-10-27 17:46:19 -0400 |
---|---|---|
committer | Ansis Brammanis <brammanis@gmail.com> | 2016-01-06 14:10:23 -0800 |
commit | dc1630f50d1a3493acd2afe42aa2b8dd2e8876fb (patch) | |
tree | d5553632ec84bb67793e814e82a3237f09ea2e2c | |
parent | 9d6cb1361c84fbc6736b2842037d8a3cff580d1a (diff) | |
download | qtlocation-mapboxgl-dc1630f50d1a3493acd2afe42aa2b8dd2e8876fb.tar.gz |
[core] always add labels to buffers in MapMode::Still
To minimize label clipping.
-rw-r--r-- | src/mbgl/layer/symbol_layer.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/map/source.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/map/tile_worker.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/map/tile_worker.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/map/vector_tile_data.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/vector_tile_data.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/style/style_bucket_parameters.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/style_update_parameters.hpp | 3 |
11 files changed, 33 insertions, 12 deletions
diff --git a/src/mbgl/layer/symbol_layer.cpp b/src/mbgl/layer/symbol_layer.cpp index 25dfeeae0a..e05b27bffc 100644 --- a/src/mbgl/layer/symbol_layer.cpp +++ b/src/mbgl/layer/symbol_layer.cpp @@ -114,7 +114,8 @@ bool SymbolLayer::recalculate(const StyleCalculationParameters& parameters) { std::unique_ptr<Bucket> SymbolLayer::createBucket(StyleBucketParameters& parameters) const { auto bucket = std::make_unique<SymbolBucket>(parameters.tileID.overscaling, - parameters.tileID.z); + parameters.tileID.z, + parameters.mode); bucket->layout = layout; diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp index c7e064c13c..107c405efe 100644 --- a/src/mbgl/map/source.cpp +++ b/src/mbgl/map/source.cpp @@ -330,6 +330,7 @@ TileData::State Source::addTile(const TileID& id, const StyleUpdateParameters& p std::move(monitor), info.source_id, parameters.style, + parameters.mode, callback); } diff --git a/src/mbgl/map/tile_worker.cpp b/src/mbgl/map/tile_worker.cpp index c35b3d8b3c..f483082cfc 100644 --- a/src/mbgl/map/tile_worker.cpp +++ b/src/mbgl/map/tile_worker.cpp @@ -21,13 +21,15 @@ TileWorker::TileWorker(TileID id_, SpriteStore& spriteStore_, GlyphAtlas& glyphAtlas_, GlyphStore& glyphStore_, - const std::atomic<TileData::State>& state_) + const std::atomic<TileData::State>& state_, + const MapMode mode_) : id(id_), sourceID(std::move(sourceID_)), spriteStore(spriteStore_), glyphAtlas(glyphAtlas_), glyphStore(glyphStore_), - state(state_) { + state(state_), + mode(mode_) { } TileWorker::~TileWorker() { @@ -140,7 +142,8 @@ void TileWorker::parseLayer(const StyleLayer* layer, const GeometryTile& geometr spriteStore, glyphAtlas, glyphStore, - *collisionTile); + *collisionTile, + mode); std::unique_ptr<Bucket> bucket = layer->createBucket(parameters); diff --git a/src/mbgl/map/tile_worker.hpp b/src/mbgl/map/tile_worker.hpp index d25b6e50f2..74894a9eb8 100644 --- a/src/mbgl/map/tile_worker.hpp +++ b/src/mbgl/map/tile_worker.hpp @@ -3,6 +3,7 @@ #include <mapbox/variant.hpp> +#include <mbgl/map/mode.hpp> #include <mbgl/map/tile_data.hpp> #include <mbgl/util/noncopyable.hpp> #include <mbgl/util/ptr.hpp> @@ -44,7 +45,8 @@ public: SpriteStore&, GlyphAtlas&, GlyphStore&, - const std::atomic<TileData::State>&); + const std::atomic<TileData::State>&, + const MapMode); ~TileWorker(); TileParseResult parseAllLayers(std::vector<std::unique_ptr<StyleLayer>>, @@ -67,6 +69,7 @@ private: GlyphAtlas& glyphAtlas; GlyphStore& glyphStore; const std::atomic<TileData::State>& state; + const MapMode mode; bool partialParse = false; diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp index 3fe423b502..048cadc987 100644 --- a/src/mbgl/map/vector_tile_data.cpp +++ b/src/mbgl/map/vector_tile_data.cpp @@ -12,6 +12,7 @@ VectorTileData::VectorTileData(const TileID& id_, std::unique_ptr<GeometryTileMonitor> monitor_, std::string sourceID, Style& style_, + const MapMode mode_, const std::function<void()>& callback) : TileData(id_), style(style_), @@ -21,7 +22,8 @@ VectorTileData::VectorTileData(const TileID& id_, *style_.spriteStore, *style_.glyphAtlas, *style_.glyphStore, - state), + state, + mode_), monitor(std::move(monitor_)) { state = State::loading; diff --git a/src/mbgl/map/vector_tile_data.hpp b/src/mbgl/map/vector_tile_data.hpp index 1b31f3db86..3d877de600 100644 --- a/src/mbgl/map/vector_tile_data.hpp +++ b/src/mbgl/map/vector_tile_data.hpp @@ -22,6 +22,7 @@ public: std::unique_ptr<GeometryTileMonitor> monitor, std::string sourceID, Style&, + const MapMode, const std::function<void()>& callback); ~VectorTileData(); diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp index cb8b29b471..d8273fd4f8 100644 --- a/src/mbgl/renderer/symbol_bucket.cpp +++ b/src/mbgl/renderer/symbol_bucket.cpp @@ -53,8 +53,8 @@ SymbolInstance::SymbolInstance(Anchor& anchor, const std::vector<Coordinate>& li iconCollisionFeature(line, anchor, shapedIcon, iconBoxScale, iconPadding, iconAlongLine) {}; -SymbolBucket::SymbolBucket(float overscaling_, float zoom_) - : overscaling(overscaling_), zoom(zoom_), tileSize(512 * overscaling_), tilePixelRatio(tileExtent / tileSize) { +SymbolBucket::SymbolBucket(float overscaling_, float zoom_, const MapMode mode_) + : overscaling(overscaling_), zoom(zoom_), tileSize(512 * overscaling_), tilePixelRatio(tileExtent / tileSize), mode(mode_) { } SymbolBucket::~SymbolBucket() { @@ -329,7 +329,7 @@ void SymbolBucket::addFeature(const std::vector<std::vector<Coordinate>> &lines, // the buffers for both tiles and clipped to tile boundaries at draw time. // // TODO remove the `&& false` when is #1673 implemented - const bool addToBuffers = inside || (mayOverlap && false); + const bool addToBuffers = (mode == MapMode::Still) || inside || (mayOverlap && false); symbolInstances.emplace_back(anchor, line, shapedText, shapedIcon, layout, addToBuffers, textBoxScale, textPadding, textAlongLine, diff --git a/src/mbgl/renderer/symbol_bucket.hpp b/src/mbgl/renderer/symbol_bucket.hpp index 7150c9808c..b447db4ec9 100644 --- a/src/mbgl/renderer/symbol_bucket.hpp +++ b/src/mbgl/renderer/symbol_bucket.hpp @@ -3,6 +3,7 @@ #include <mbgl/renderer/bucket.hpp> #include <mbgl/map/geometry_tile.hpp> +#include <mbgl/map/mode.hpp> #include <mbgl/geometry/vao.hpp> #include <mbgl/geometry/elements_buffer.hpp> #include <mbgl/geometry/text_buffer.hpp> @@ -65,7 +66,7 @@ class SymbolBucket : public Bucket { typedef ElementGroup<1> CollisionBoxElementGroup; public: - SymbolBucket(float overscaling, float zoom); + SymbolBucket(float overscaling, float zoom, const MapMode); ~SymbolBucket() override; void upload() override; @@ -119,6 +120,7 @@ private: const float tileSize; const float tileExtent = 4096.0f; const float tilePixelRatio; + const MapMode mode; std::set<GlyphRange> ranges; std::vector<SymbolInstance> symbolInstances; diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index b1c867a692..5c6869ac77 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -132,6 +132,7 @@ void Style::update(const TransformState& transform, workers, texturePool, shouldReparsePartialTiles, + data.mode, data, *this); diff --git a/src/mbgl/style/style_bucket_parameters.hpp b/src/mbgl/style/style_bucket_parameters.hpp index 5a84a33d48..732ebade1d 100644 --- a/src/mbgl/style/style_bucket_parameters.hpp +++ b/src/mbgl/style/style_bucket_parameters.hpp @@ -1,6 +1,7 @@ #ifndef STYLE_BUCKET_PARAMETERS #define STYLE_BUCKET_PARAMETERS +#include <mbgl/map/mode.hpp> #include <mbgl/style/filter_expression.hpp> #include <mbgl/map/tile_data.hpp> @@ -26,7 +27,8 @@ public: SpriteStore& spriteStore_, GlyphAtlas& glyphAtlas_, GlyphStore& glyphStore_, - CollisionTile& collisionTile_) + CollisionTile& collisionTile_, + const MapMode mode_) : tileID(tileID_), layer(layer_), state(state_), @@ -35,7 +37,8 @@ public: spriteStore(spriteStore_), glyphAtlas(glyphAtlas_), glyphStore(glyphStore_), - collisionTile(collisionTile_) {} + collisionTile(collisionTile_), + mode(mode_) {} bool cancelled() const { return state == TileData::State::obsolete; @@ -52,6 +55,7 @@ public: GlyphAtlas& glyphAtlas; GlyphStore& glyphStore; CollisionTile& collisionTile; + const MapMode mode; }; } // namespace mbgl diff --git a/src/mbgl/style/style_update_parameters.hpp b/src/mbgl/style/style_update_parameters.hpp index 7a0f34bf56..0a646219f0 100644 --- a/src/mbgl/style/style_update_parameters.hpp +++ b/src/mbgl/style/style_update_parameters.hpp @@ -20,6 +20,7 @@ public: Worker& worker_, TexturePool& texturePool_, bool shouldReparsePartialTiles_, + const MapMode mode_, MapData& data_, Style& style_) : pixelRatio(pixelRatio_), @@ -29,6 +30,7 @@ public: worker(worker_), texturePool(texturePool_), shouldReparsePartialTiles(shouldReparsePartialTiles_), + mode(mode_), data(data_), style(style_) {} @@ -39,6 +41,7 @@ public: Worker& worker; TexturePool& texturePool; bool shouldReparsePartialTiles; + const MapMode mode; // TODO: remove MapData& data; |