summaryrefslogtreecommitdiff
path: root/src/mbgl/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/map')
-rw-r--r--src/mbgl/map/live_tile_data.cpp5
-rw-r--r--src/mbgl/map/live_tile_data.hpp3
-rw-r--r--src/mbgl/map/map.cpp14
-rw-r--r--src/mbgl/map/map_data.cpp2
-rw-r--r--src/mbgl/map/map_data.hpp11
-rw-r--r--src/mbgl/map/source.cpp10
-rw-r--r--src/mbgl/map/source.hpp2
-rw-r--r--src/mbgl/map/tile_data.hpp2
-rw-r--r--src/mbgl/map/vector_tile_data.cpp18
-rw-r--r--src/mbgl/map/vector_tile_data.hpp9
10 files changed, 55 insertions, 21 deletions
diff --git a/src/mbgl/map/live_tile_data.cpp b/src/mbgl/map/live_tile_data.cpp
index 54b3948906..d63ea43470 100644
--- a/src/mbgl/map/live_tile_data.cpp
+++ b/src/mbgl/map/live_tile_data.cpp
@@ -17,9 +17,10 @@ LiveTileData::LiveTileData(const TileID& id_,
SpriteAtlas& spriteAtlas_,
util::ptr<Sprite> sprite_,
const SourceInfo& source_,
- float angle_)
+ float angle_,
+ bool collisionDebug_)
: VectorTileData::VectorTileData(id_, mapMaxZoom, style_, glyphAtlas_, glyphStore_,
- spriteAtlas_, sprite_, source_, angle_),
+ spriteAtlas_, sprite_, source_, angle_, collisionDebug_),
annotationManager(annotationManager_) {
// live features are always ready
setState(State::loaded);
diff --git a/src/mbgl/map/live_tile_data.hpp b/src/mbgl/map/live_tile_data.hpp
index c237cddc95..0247c47fa7 100644
--- a/src/mbgl/map/live_tile_data.hpp
+++ b/src/mbgl/map/live_tile_data.hpp
@@ -18,7 +18,8 @@ public:
SpriteAtlas&,
util::ptr<Sprite>,
const SourceInfo&,
- float);
+ float,
+ bool);
~LiveTileData();
void parse() override;
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 8514c6ecb2..3ba82252de 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -290,6 +290,20 @@ bool Map::getDebug() const {
return data->getDebug();
}
+void Map::setCollisionDebug(bool value) {
+ data->setCollisionDebug(value);
+ update();
+}
+
+void Map::toggleCollisionDebug() {
+ data->toggleCollisionDebug();
+ update();
+}
+
+bool Map::getCollisionDebug() const {
+ return data->getCollisionDebug();
+}
+
bool Map::isFullyLoaded() const {
return data->getFullyLoaded();
}
diff --git a/src/mbgl/map/map_data.cpp b/src/mbgl/map/map_data.cpp
index 23bc094990..993edb38e8 100644
--- a/src/mbgl/map/map_data.cpp
+++ b/src/mbgl/map/map_data.cpp
@@ -41,4 +41,4 @@ std::vector<std::string> MapData::getClasses() const {
return classes;
}
-} \ No newline at end of file
+}
diff --git a/src/mbgl/map/map_data.hpp b/src/mbgl/map/map_data.hpp
index 54114b9d0c..803a9b1acb 100644
--- a/src/mbgl/map/map_data.hpp
+++ b/src/mbgl/map/map_data.hpp
@@ -64,6 +64,16 @@ public:
debug = value;
}
+ inline bool getCollisionDebug() const {
+ return collisionDebug;
+ }
+ inline bool toggleCollisionDebug() {
+ return collisionDebug ^= 1u;
+ }
+ inline void setCollisionDebug(bool value) {
+ collisionDebug = value;
+ }
+
inline bool getFullyLoaded() const {
return loaded;
}
@@ -98,6 +108,7 @@ private:
std::string accessToken;
std::vector<std::string> classes;
std::atomic<uint8_t> debug { false };
+ std::atomic<uint8_t> collisionDebug { false };
std::atomic<bool> loaded { false };
std::atomic<Duration> animationTime;
std::atomic<Duration> defaultTransitionDuration;
diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp
index 01057103ef..3d7ab6fd32 100644
--- a/src/mbgl/map/source.cpp
+++ b/src/mbgl/map/source.cpp
@@ -288,7 +288,7 @@ TileData::State Source::addTile(MapData& data,
if (info.type == SourceType::Vector) {
new_tile.data =
std::make_shared<VectorTileData>(normalized_id, data.transform.getMaxZoom(), style, glyphAtlas,
- glyphStore, spriteAtlas, sprite, info, transformState.getAngle());
+ glyphStore, spriteAtlas, sprite, info, transformState.getAngle(), data.getCollisionDebug());
new_tile.data->request(style.workers, transformState.getPixelRatio(), callback);
} else if (info.type == SourceType::Raster) {
new_tile.data = std::make_shared<RasterTileData>(normalized_id, texturePool, info);
@@ -296,7 +296,7 @@ TileData::State Source::addTile(MapData& data,
} else if (info.type == SourceType::Annotations) {
new_tile.data = std::make_shared<LiveTileData>(normalized_id, data.annotationManager,
data.transform.getMaxZoom(), style, glyphAtlas,
- glyphStore, spriteAtlas, sprite, info, transformState.getAngle());
+ glyphStore, spriteAtlas, sprite, info, transformState.getAngle(), data.getCollisionDebug());
new_tile.data->reparse(style.workers, callback);
} else {
throw std::runtime_error("source type not implemented");
@@ -497,7 +497,7 @@ bool Source::update(MapData& data,
updateTilePtrs();
- redoPlacement(transformState);
+ redoPlacement(transformState, data.getCollisionDebug());
updated = data.getAnimationTime();
@@ -520,9 +520,9 @@ void Source::updateTilePtrs() {
}
}
-void Source::redoPlacement(const TransformState& transformState) {
+void Source::redoPlacement(const TransformState& transformState, bool collisionDebug) {
for (auto& tilePtr : tilePtrs) {
- tilePtr->data->redoPlacement(transformState.getAngle());
+ tilePtr->data->redoPlacement(transformState.getAngle(), collisionDebug);
}
}
diff --git a/src/mbgl/map/source.hpp b/src/mbgl/map/source.hpp
index 2c5ac85f49..505292cc74 100644
--- a/src/mbgl/map/source.hpp
+++ b/src/mbgl/map/source.hpp
@@ -101,7 +101,7 @@ public:
bool enabled;
private:
- void redoPlacement(const TransformState& transformState);
+ void redoPlacement(const TransformState& transformState, bool collisionDebug);
void emitSourceLoaded();
void emitTileLoaded(bool isNewTile);
diff --git a/src/mbgl/map/tile_data.hpp b/src/mbgl/map/tile_data.hpp
index d1ca10ddd4..1ec58ec839 100644
--- a/src/mbgl/map/tile_data.hpp
+++ b/src/mbgl/map/tile_data.hpp
@@ -80,7 +80,7 @@ public:
virtual void parse() = 0;
virtual Bucket* getBucket(StyleLayer const &layer_desc) = 0;
- virtual void redoPlacement(float) {}
+ virtual void redoPlacement(float, bool) {}
const TileID id;
const std::string name;
diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp
index 312dde7f57..c453d893a8 100644
--- a/src/mbgl/map/vector_tile_data.cpp
+++ b/src/mbgl/map/vector_tile_data.cpp
@@ -22,7 +22,8 @@ VectorTileData::VectorTileData(const TileID& id_,
SpriteAtlas& spriteAtlas_,
util::ptr<Sprite> sprite_,
const SourceInfo& source_,
- float angle)
+ float angle,
+ bool collisionDebug)
: TileData(id_, source_),
depth(id_.z >= source_.max_zoom ? mapMaxZoom - id_.z : 1),
glyphAtlas(glyphAtlas_),
@@ -30,7 +31,7 @@ VectorTileData::VectorTileData(const TileID& id_,
spriteAtlas(spriteAtlas_),
sprite(sprite_),
style(style_),
- collision(util::make_unique<CollisionTile>(id_.z, 4096, source_.tile_size, angle)),
+ collision(util::make_unique<CollisionTile>(id_.z, 4096, source_.tile_size, angle, collisionDebug)),
lastAngle(angle),
currentAngle(angle) {
}
@@ -116,26 +117,29 @@ void VectorTileData::setState(const State& state_) {
}
void VectorTileData::redoPlacement() {
- redoPlacement(lastAngle);
+ redoPlacement(lastAngle, lastCollisionDebug);
}
-void VectorTileData::redoPlacement(float angle) {
- if (angle != currentAngle) {
+void VectorTileData::redoPlacement(float angle, bool collisionDebug) {
+ if (angle != currentAngle || collisionDebug != currentCollisionDebug) {
lastAngle = angle;
+ lastCollisionDebug = collisionDebug;
if (getState() != State::parsed || redoingPlacement) return;
redoingPlacement = true;
currentAngle = angle;
+ currentCollisionDebug = collisionDebug;
auto callback = std::bind(&VectorTileData::endRedoPlacement, this);
- workRequest = style.workers.send([this, angle] { workerRedoPlacement(angle); }, callback);
+ workRequest = style.workers.send([this, angle, collisionDebug] { workerRedoPlacement(angle, collisionDebug); }, callback);
}
}
-void VectorTileData::workerRedoPlacement(float angle) {
+void VectorTileData::workerRedoPlacement(float angle, bool collisionDebug) {
collision->reset(angle, 0);
+ collision->setDebug(collisionDebug);
for (const auto& layer_desc : style.layers) {
auto bucket = getBucket(*layer_desc);
if (bucket) {
diff --git a/src/mbgl/map/vector_tile_data.hpp b/src/mbgl/map/vector_tile_data.hpp
index eea353bd96..95a389c199 100644
--- a/src/mbgl/map/vector_tile_data.hpp
+++ b/src/mbgl/map/vector_tile_data.hpp
@@ -40,11 +40,12 @@ public:
SpriteAtlas&,
util::ptr<Sprite>,
const SourceInfo&,
- float);
+ float,
+ bool);
~VectorTileData();
void parse() override;
- void redoPlacement(float angle) override;
+ void redoPlacement(float angle, bool collisionDebug) override;
virtual Bucket* getBucket(StyleLayer const &layer_desc) override;
size_t countBuckets() const;
@@ -88,9 +89,11 @@ private:
float lastAngle = 0;
float currentAngle;
+ bool lastCollisionDebug = 0;
+ bool currentCollisionDebug = 0;
bool redoingPlacement = false;
void endRedoPlacement();
- void workerRedoPlacement(float angle);
+ void workerRedoPlacement(float angle, bool collisionDebug);
};
}