summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-09 12:40:15 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-09 13:36:39 +0300
commitb59e92f1de6762d314559c8b40ccc2333e7d8264 (patch)
tree862f23a5be66de88d2ef2e19df59aeb452f2c9a4
parent718dd295abd099fbfd323dc46543a4eb5c6cf36b (diff)
downloadqtlocation-mapboxgl-upstream/mikhail_PlacedSymbolData_has_layer_id.tar.gz
[core] PlacedSymbolData contains layer idupstream/mikhail_PlacedSymbolData_has_layer_id
-rw-r--r--include/mbgl/renderer/renderer.hpp2
-rw-r--r--render-test/runner.cpp6
-rw-r--r--src/mbgl/text/placement.cpp7
-rw-r--r--src/mbgl/text/placement.hpp1
-rw-r--r--test/map/map.test.cpp11
5 files changed, 22 insertions, 5 deletions
diff --git a/include/mbgl/renderer/renderer.hpp b/include/mbgl/renderer/renderer.hpp
index 60f1f6ed8b..1bd51f0f72 100644
--- a/include/mbgl/renderer/renderer.hpp
+++ b/include/mbgl/renderer/renderer.hpp
@@ -36,6 +36,8 @@ struct PlacedSymbolData {
bool intersectsTileBorder;
// Viewport padding ({viewportPadding, viewportPadding} is a coordinate of the tile's top-left corner)
float viewportPadding;
+ // Layer id (leader of the symbol layout group)
+ std::string layer;
};
class Renderer {
diff --git a/render-test/runner.cpp b/render-test/runner.cpp
index 2691edd6a5..3ccb0da0d7 100644
--- a/render-test/runner.cpp
+++ b/render-test/runner.cpp
@@ -814,8 +814,8 @@ void TestRunner::run(TestMetadata& metadata) {
ss << std::endl
<< ++metadata.duplicationsCount << ". \"" << cv.to_bytes(placedSymbol.key) << "\" "
<< (isIcon ? "icon" : "text") << " ((" << box.min.x << ", " << box.min.y << "), ("
- << box.max.x << ", " << box.max.y << ")) "
- << "at " << util::toString(tileId);
+ << box.max.x << ", " << box.max.y << ")) from layer: " << placedSymbol.layer << " at "
+ << util::toString(tileId);
duplicationsReport += ss.str();
return;
}
@@ -824,7 +824,7 @@ void TestRunner::run(TestMetadata& metadata) {
ss << std::endl
<< ++metadata.labelCutOffFound << ". \"" << cv.to_bytes(placedSymbol.key) << "\" "
<< (isIcon ? "icon" : "text") << " ((" << box.min.x << ", " << box.min.y << "), ("
- << box.max.x << ", " << box.max.y << "))"
+ << box.max.x << ", " << box.max.y << ")) from layer: " << placedSymbol.layer
<< (placed ? " is placed at " : " is not placed at ") << util::toString(tileId) << " and"
<< (it->placed ? " placed at " : " not placed at ") << util::toString(it->tileId);
cutOffLabelsReport += ss.str();
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index 87c505f2d8..9618e5471a 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -608,7 +608,7 @@ void Placement::placeSymbol(const SymbolInstance& symbolInstance,
JointPlacement(
placeText || ctx.alwaysShowText, placeIcon || ctx.alwaysShowIcon, offscreen || bucket.justReloaded));
assert(pair.second);
- newSymbolPlaced(symbolInstance, pair.first->second, ctx.placementType, textBoxes, iconBoxes);
+ newSymbolPlaced(symbolInstance, ctx, pair.first->second, ctx.placementType, textBoxes, iconBoxes);
seenCrossTileIDs.insert(symbolInstance.crossTileID);
}
@@ -1268,6 +1268,7 @@ private:
const mat4& posMatrix,
float textPixelRatio) override;
void newSymbolPlaced(const SymbolInstance&,
+ const PlacementContext&,
const JointPlacement&,
style::SymbolPlacementType,
const std::vector<ProjectedCollisionBox>&,
@@ -1476,6 +1477,7 @@ bool TilePlacement::canPlaceAtVariableAnchor(const CollisionBox& box,
}
void TilePlacement::newSymbolPlaced(const SymbolInstance& symbol,
+ const PlacementContext& ctx,
const JointPlacement& placement,
style::SymbolPlacementType placementType,
const std::vector<ProjectedCollisionBox>& textCollisionBoxes,
@@ -1502,7 +1504,8 @@ void TilePlacement::newSymbolPlaced(const SymbolInstance& symbol,
placement.text,
placement.icon,
!placement.skipFade && populateIntersections,
- collisionIndex.getViewportPadding()};
+ collisionIndex.getViewportPadding(),
+ ctx.getBucket().bucketLeaderID};
placedSymbolsData.emplace_back(std::move(symbolData));
}
diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp
index e62d2bdf3d..6daa09180e 100644
--- a/src/mbgl/text/placement.hpp
+++ b/src/mbgl/text/placement.hpp
@@ -148,6 +148,7 @@ protected:
void placeLayer(const RenderLayer&, std::set<uint32_t>&);
virtual void commit();
virtual void newSymbolPlaced(const SymbolInstance&,
+ const PlacementContext&,
const JointPlacement&,
style::SymbolPlacementType,
const std::vector<ProjectedCollisionBox>& /*textBoxes*/,
diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp
index 2c3ca0cea3..4f25000177 100644
--- a/test/map/map.test.cpp
+++ b/test/map/map.test.cpp
@@ -1431,7 +1431,18 @@ TEST(Map, PlacedSymbolData) {
int placedTotal = 0;
+ const std::set<std::string> symbolLayers{"place-city-lg-s",
+ "place-neighbourhood",
+ "place-suburb",
+ "poi-scalerank2",
+ "poi-scalerank3",
+ "poi-parks-scalerank1",
+ "poi-parks-scalerank2",
+ "poi-parks-scalerank3",
+ "rail-label"};
+
for (const auto& placedSymbol : placedSymbols) {
+ EXPECT_NE(0u, symbolLayers.count(placedSymbol.layer));
if (placedSymbol.textPlaced && placedSymbol.textCollisionBox) {
if (isInsideTile(*placedSymbol.textCollisionBox, placedSymbol.viewportPadding, viewportSize)) {
EXPECT_FALSE(placedSymbol.intersectsTileBorder);