From f70cadf2e0ebc9b6a1d46117cd3714df9dcf23b6 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Thu, 16 Jan 2020 12:29:56 +0200 Subject: [core] Cache showCollisionBoxes in Placement --- src/mbgl/renderer/render_orchestrator.cpp | 8 ++------ src/mbgl/text/placement.cpp | 21 +++++++++------------ src/mbgl/text/placement.hpp | 4 ++-- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index c77eaca37e..5e5f2da3c3 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -399,9 +399,7 @@ std::unique_ptr RenderOrchestrator::createRenderTree( for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) { const RenderLayer& layer = *it; usedSymbolLayers.insert(layer.getID()); - placement->placeLayer(layer, - renderTreeParameters->transformParams.projMatrix, - updateParameters->debugOptions & MapDebugOptions::Collision); + placement->placeLayer(layer, renderTreeParameters->transformParams.projMatrix); } placement->commit(); @@ -424,9 +422,7 @@ std::unique_ptr RenderOrchestrator::createRenderTree( for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) { const RenderLayer& layer = *it; crossTileSymbolIndex.addLayer(layer, updateParameters->transformState.getLatLng().longitude()); - placement->placeLayer(layer, - renderTreeParameters->transformParams.projMatrix, - updateParameters->debugOptions & MapDebugOptions::Collision); + placement->placeLayer(layer, renderTreeParameters->transformParams.projMatrix); } placement->commit(); placementController.setPlacement(std::move(placement)); diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 5673ff5041..edd6506c2c 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -99,7 +99,8 @@ Placement::Placement(std::shared_ptr updateParameters_, commitTime(updateParameters->timePoint), placementZoom(updateParameters->transformState.getZoom()), collisionGroups(updateParameters->crossSourceCollisions), - prevPlacement(std::move(prevPlacement_)) { + prevPlacement(std::move(prevPlacement_)), + showCollisionBoxes(updateParameters->debugOptions & MapDebugOptions::Collision) { assert(prevPlacement || mapMode != MapMode::Continuous); if (prevPlacement) { prevPlacement->get()->prevPlacement = nullopt; // Only hold on to one placement back @@ -108,16 +109,11 @@ Placement::Placement(std::shared_ptr updateParameters_, Placement::Placement() : collisionIndex({}, MapMode::Static), collisionGroups(true) {} -void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix, bool showCollisionBoxes) { +void Placement::placeLayer(const RenderLayer& layer, const mat4& projMatrix) { std::set seenCrossTileIDs; for (const auto& item : layer.getPlacementData()) { Bucket& bucket = item.bucket; - BucketPlacementParameters params{ - item.tile, - projMatrix, - layer.baseImpl->source, - item.featureIndex, - showCollisionBoxes}; + BucketPlacementParameters params{item.tile, projMatrix, layer.baseImpl->source, item.featureIndex}; bucket.place(*this, params, seenCrossTileIDs); } } @@ -146,6 +142,7 @@ Point calculateVariableLayoutOffset(style::SymbolAnchorType anchor, void Placement::placeBucket(const SymbolBucket& bucket, const BucketPlacementParameters& params, std::set& seenCrossTileIDs) { + assert(updateParameters); const auto& layout = *bucket.layout; const auto& renderTile = params.tile; const auto& state = collisionIndex.getTransformState(); @@ -278,7 +275,7 @@ void Placement::placeBucket(const SymbolBucket& bucket, fontSize, layout.get(), pitchWithMap, - params.showCollisionBoxes, + showCollisionBoxes, avoidEdges, collisionGroup.second, textBoxes); @@ -376,7 +373,7 @@ void Placement::placeBucket(const SymbolBucket& bucket, fontSize, allowOverlap, pitchWithMap, - params.showCollisionBoxes, + showCollisionBoxes, avoidEdges, collisionGroup.second, textBoxes); @@ -392,7 +389,7 @@ void Placement::placeBucket(const SymbolBucket& bucket, fontSize, iconAllowOverlap, pitchWithMap, - params.showCollisionBoxes, + showCollisionBoxes, avoidEdges, collisionGroup.second, iconBoxes); @@ -490,7 +487,7 @@ void Placement::placeBucket(const SymbolBucket& bucket, fontSize, layout.get(), pitchWithMap, - params.showCollisionBoxes, + showCollisionBoxes, avoidEdges, collisionGroup.second, iconBoxes); diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index 04a0bc7f5d..0d224f67de 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -92,7 +92,6 @@ public: const mat4& projMatrix; std::string sourceId; std::shared_ptr featureIndex; - bool showCollisionBoxes; }; class Placement; @@ -116,7 +115,7 @@ public: Placement(std::shared_ptr, optional> prevPlacement = nullopt); Placement(); - void placeLayer(const RenderLayer&, const mat4&, bool showCollisionBoxes); + void placeLayer(const RenderLayer&, const mat4&); void commit(); void updateLayerBuckets(const RenderLayer&, const TransformState&, bool updateOpacities) const; float symbolFadeChange(TimePoint now) const; @@ -163,6 +162,7 @@ private: std::unordered_map retainedQueryData; CollisionGroups collisionGroups; mutable optional> prevPlacement; + bool showCollisionBoxes = false; // Used for debug purposes. std::unordered_map> collisionCircles; -- cgit v1.2.1