diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-10-26 14:56:31 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@gmail.com> | 2017-10-31 10:25:57 -0700 |
commit | 4531f34fbe39fac79ce21bc691908a0d0eeb9feb (patch) | |
tree | 7f340f1b8f225f828d61c8aea2241cd30e42e0ed | |
parent | 5467ba47b8c980a369226d95cfe7fa1188e53235 (diff) | |
download | qtlocation-mapboxgl-4531f34fbe39fac79ce21bc691908a0d0eeb9feb.tar.gz |
Hook up "showCollisionBoxes" logic where "setPlacementConfig" logic used to be.
Remove PlacementConfig
[skip ci]
-rw-r--r-- | cmake/core-files.cmake | 1 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/text/collision_index.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/placement_config.hpp | 33 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_worker.cpp | 32 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_worker.hpp | 7 | ||||
-rw-r--r-- | src/mbgl/tile/tile.hpp | 3 |
12 files changed, 56 insertions, 61 deletions
diff --git a/cmake/core-files.cmake b/cmake/core-files.cmake index 59697b41a5..4e35e12ee8 100644 --- a/cmake/core-files.cmake +++ b/cmake/core-files.cmake @@ -495,7 +495,6 @@ set(MBGL_CORE_FILES src/mbgl/text/glyph_range.hpp src/mbgl/text/placement.cpp src/mbgl/text/placement.hpp - src/mbgl/text/placement_config.hpp src/mbgl/text/quads.cpp src/mbgl/text/quads.hpp src/mbgl/text/shaping.cpp diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 534c9f5035..206ee05027 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -413,7 +413,7 @@ std::vector<float> CalculateTileDistances(const GeometryCoordinates& line, const return tileDistances; } -std::unique_ptr<SymbolBucket> SymbolLayout::place() { +std::unique_ptr<SymbolBucket> SymbolLayout::place(const bool showCollisionBoxes) { auto bucket = std::make_unique<SymbolBucket>(layout, layerPaintProperties, textSize, iconSize, zoom, sdfIcons, iconsNeedLinear, symbolInstances); // Calculate which labels can be shown and when they can be shown and @@ -470,7 +470,7 @@ std::unique_ptr<SymbolBucket> SymbolLayout::place() { } } - if (true) { // TODO: hook up showCollisionBoxes + if (showCollisionBoxes) { addToDebugBuffers(*bucket); } diff --git a/src/mbgl/layout/symbol_layout.hpp b/src/mbgl/layout/symbol_layout.hpp index b9b11f26b9..99b2fd561c 100644 --- a/src/mbgl/layout/symbol_layout.hpp +++ b/src/mbgl/layout/symbol_layout.hpp @@ -36,7 +36,7 @@ public: void prepare(const GlyphMap&, const GlyphPositions&, const ImageMap&, const ImagePositions&); - std::unique_ptr<SymbolBucket> place(); + std::unique_ptr<SymbolBucket> place(const bool showCollisionBoxes); bool hasSymbolInstances() const; diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index cfb6a14dea..77810f0ca2 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -367,8 +367,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { auto newPlacement = std::make_unique<Placement>(parameters.state); for (auto it = order.rbegin(); it != order.rend(); ++it) { if (it->layer.is<RenderSymbolLayer>()) { - bool showCollisionBoxes = true; // TODO - newPlacement->placeLayer(*it->layer.as<RenderSymbolLayer>(), showCollisionBoxes); + newPlacement->placeLayer(*it->layer.as<RenderSymbolLayer>(), parameters.debugOptions & MapDebugOptions::Collision); } } diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index 3e2311089d..a2c675a889 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -5,7 +5,6 @@ #include <mbgl/renderer/tile_parameters.hpp> #include <mbgl/renderer/query.hpp> #include <mbgl/map/transform.hpp> -#include <mbgl/text/placement_config.hpp> #include <mbgl/math/clamp.hpp> #include <mbgl/util/tile_cover.hpp> #include <mbgl/util/enum.hpp> @@ -193,13 +192,7 @@ void TilePyramid::update(const std::vector<Immutable<style::Layer::Impl>>& layer } for (auto& pair : tiles) { - const PlacementConfig config { parameters.transformState.getAngle(), - parameters.transformState.getPitch(), - parameters.transformState.getCameraToCenterDistance(), - parameters.transformState.getCameraToTileDistance(pair.first.toUnwrapped()), - parameters.debugOptions & MapDebugOptions::Collision }; - - pair.second->setPlacementConfig(config); + pair.second->setShowCollisionBoxes(parameters.debugOptions & MapDebugOptions::Collision); } } diff --git a/src/mbgl/text/collision_index.hpp b/src/mbgl/text/collision_index.hpp index f074ea7d2b..226a3be5ed 100644 --- a/src/mbgl/text/collision_index.hpp +++ b/src/mbgl/text/collision_index.hpp @@ -2,8 +2,6 @@ #include <mbgl/geometry/feature_index.hpp> #include <mbgl/text/collision_feature.hpp> -#include <mbgl/text/placement_config.hpp> -#include <mbgl/tile/geometry_tile_data.hpp> #include <mbgl/util/grid_index.hpp> #include <mbgl/map/transform_state.hpp> diff --git a/src/mbgl/text/placement_config.hpp b/src/mbgl/text/placement_config.hpp deleted file mode 100644 index 48b24b5f41..0000000000 --- a/src/mbgl/text/placement_config.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include <mbgl/util/constants.hpp> - -namespace mbgl { - -class PlacementConfig { -public: - PlacementConfig(float angle_ = 0, float pitch_ = 0, float cameraToCenterDistance_ = 0, float cameraToTileDistance_ = 0, bool debug_ = false) - : angle(angle_), pitch(pitch_), cameraToCenterDistance(cameraToCenterDistance_), cameraToTileDistance(cameraToTileDistance_), debug(debug_) { - } - - bool operator==(const PlacementConfig& rhs) const { - return angle == rhs.angle && - pitch == rhs.pitch && - debug == rhs.debug && - ((pitch * util::RAD2DEG < 25) || - (cameraToCenterDistance == rhs.cameraToCenterDistance && cameraToTileDistance == rhs.cameraToTileDistance)); - } - - bool operator!=(const PlacementConfig& rhs) const { - return !operator==(rhs); - } - -public: - float angle; - float pitch; - float cameraToCenterDistance; - float cameraToTileDistance; - bool debug; -}; - -} // namespace mbgl diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 6afd5b5e2f..f93b188ae0 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -32,7 +32,7 @@ using namespace style; GeometryTile's 'correlationID' is used for ensuring the tile will be flagged as non-pending only when the placement coming from the last operation (as in - 'setData', 'setLayers', 'setPlacementConfig') occurs. This is important for + 'setData', 'setLayers', 'setShowCollisionBoxes') occurs. This is important for still mode rendering as we want to render only when all layout and placement operations are completed. @@ -53,10 +53,12 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_, id_, obsolete, parameters.mode, - parameters.pixelRatio), + parameters.pixelRatio, + parameters.debugOptions & MapDebugOptions::Collision), glyphManager(parameters.glyphManager), imageManager(parameters.imageManager), - mode(parameters.mode) { + mode(parameters.mode), + showCollisionBoxes(parameters.debugOptions & MapDebugOptions::Collision) { } GeometryTile::~GeometryTile() { @@ -113,6 +115,14 @@ void GeometryTile::setLayers(const std::vector<Immutable<Layer::Impl>>& layers) worker.invoke(&GeometryTileWorker::setLayers, std::move(impls), correlationID); } +void GeometryTile::setShowCollisionBoxes(const bool showCollisionBoxes_) { + if (showCollisionBoxes != showCollisionBoxes_) { + showCollisionBoxes = showCollisionBoxes_; + ++correlationID; + worker.invoke(&GeometryTileWorker::setShowCollisionBoxes, showCollisionBoxes, correlationID); + } +} + void GeometryTile::onLayout(LayoutResult result, const uint64_t resultCorrelationID) { loaded = true; renderable = true; diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 37c697d399..354188e0ea 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -4,7 +4,6 @@ #include <mbgl/tile/geometry_tile_worker.hpp> #include <mbgl/renderer/image_manager.hpp> #include <mbgl/text/glyph_manager.hpp> -#include <mbgl/text/placement_config.hpp> #include <mbgl/util/feature.hpp> #include <mbgl/util/throttler.hpp> #include <mbgl/actor/actor.hpp> @@ -37,6 +36,7 @@ public: void setData(std::unique_ptr<const GeometryTileData>); void setLayers(const std::vector<Immutable<style::Layer::Impl>>&) override; + void setShowCollisionBoxes(const bool showCollisionBoxes) override; void onGlyphsAvailable(GlyphMap) override; void onImagesAvailable(ImageMap, uint64_t imageCorrelationID) override; @@ -115,7 +115,6 @@ private: ImageManager& imageManager; uint64_t correlationID = 0; - optional<PlacementConfig> requestedConfig; std::unordered_map<std::string, std::shared_ptr<Bucket>> nonSymbolBuckets; std::unique_ptr<FeatureIndex> featureIndex; @@ -128,6 +127,8 @@ private: std::unordered_map<std::string, std::unique_ptr<SymbolLayout>> symbolLayouts; const MapMode mode; + + bool showCollisionBoxes; public: optional<gl::Texture> glyphAtlasTexture; diff --git a/src/mbgl/tile/geometry_tile_worker.cpp b/src/mbgl/tile/geometry_tile_worker.cpp index 01c5f074e6..1870307aca 100644 --- a/src/mbgl/tile/geometry_tile_worker.cpp +++ b/src/mbgl/tile/geometry_tile_worker.cpp @@ -25,13 +25,15 @@ GeometryTileWorker::GeometryTileWorker(ActorRef<GeometryTileWorker> self_, OverscaledTileID id_, const std::atomic<bool>& obsolete_, const MapMode mode_, - const float pixelRatio_) + const float pixelRatio_, + const bool showCollisionBoxes_) : self(std::move(self_)), parent(std::move(parent_)), id(std::move(id_)), obsolete(obsolete_), mode(mode_), - pixelRatio(pixelRatio_) { + pixelRatio(pixelRatio_), + showCollisionBoxes(showCollisionBoxes_) { } GeometryTileWorker::~GeometryTileWorker() = default; @@ -115,6 +117,30 @@ void GeometryTileWorker::setLayers(std::vector<Immutable<Layer::Impl>> layers_, } } +void GeometryTileWorker::setShowCollisionBoxes(bool showCollisionBoxes_, uint64_t correlationID_) { + try { + showCollisionBoxes = showCollisionBoxes_; + correlationID = correlationID_; + + switch (state) { + case Idle: + attemptPlacement(); + coalesce(); + break; + + case Coalescing: + state = NeedPlacement; + break; + + case NeedPlacement: + case NeedLayout: + break; + } + } catch (...) { + parent.invoke(&GeometryTile::onError, std::current_exception(), correlationID); + } +} + void GeometryTileWorker::symbolDependenciesChanged() { try { switch (state) { @@ -384,7 +410,7 @@ void GeometryTileWorker::attemptPlacement() { continue; } - std::shared_ptr<Bucket> bucket = symbolLayout->place(); + std::shared_ptr<Bucket> bucket = symbolLayout->place(showCollisionBoxes); for (const auto& pair : symbolLayout->layerPaintProperties) { buckets.emplace(pair.first, bucket); } diff --git a/src/mbgl/tile/geometry_tile_worker.hpp b/src/mbgl/tile/geometry_tile_worker.hpp index 89a51cfad0..289e7c69af 100644 --- a/src/mbgl/tile/geometry_tile_worker.hpp +++ b/src/mbgl/tile/geometry_tile_worker.hpp @@ -4,7 +4,6 @@ #include <mbgl/tile/tile_id.hpp> #include <mbgl/style/image_impl.hpp> #include <mbgl/text/glyph.hpp> -#include <mbgl/text/placement_config.hpp> #include <mbgl/actor/actor_ref.hpp> #include <mbgl/util/optional.hpp> #include <mbgl/util/immutable.hpp> @@ -30,11 +29,13 @@ public: OverscaledTileID, const std::atomic<bool>&, const MapMode, - const float pixelRatio); + const float pixelRatio, + const bool showCollisionBoxes_); ~GeometryTileWorker(); void setLayers(std::vector<Immutable<style::Layer::Impl>>, uint64_t correlationID); void setData(std::unique_ptr<const GeometryTileData>, uint64_t correlationID); + void setShowCollisionBoxes(bool showCollisionBoxes_, uint64_t correlationID_); void onGlyphsAvailable(GlyphMap glyphs); void onImagesAvailable(ImageMap images, uint64_t imageCorrelationID); @@ -81,6 +82,8 @@ private: ImageDependencies pendingImageDependencies; GlyphMap glyphMap; ImageMap imageMap; + + bool showCollisionBoxes; }; } // namespace mbgl diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp index 0ce814890e..93c896f2ef 100644 --- a/src/mbgl/tile/tile.hpp +++ b/src/mbgl/tile/tile.hpp @@ -23,7 +23,6 @@ namespace mbgl { class DebugBucket; class TransformState; class TileObserver; -class PlacementConfig; class RenderLayer; class RenderedQueryOptions; class SourceQueryOptions; @@ -50,7 +49,7 @@ public: virtual void upload(gl::Context&) = 0; virtual Bucket* getBucket(const style::Layer::Impl&) const = 0; - virtual void setPlacementConfig(const PlacementConfig&) {} + virtual void setShowCollisionBoxes(const bool) {} virtual void setLayers(const std::vector<Immutable<style::Layer::Impl>>&) {} virtual void setMask(TileMask&&) {} |