diff options
-rw-r--r-- | include/mbgl/renderer/renderer.hpp | 2 | ||||
-rw-r--r-- | render-test/runner.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/text/placement.hpp | 1 | ||||
-rw-r--r-- | test/map/map.test.cpp | 11 |
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); |