From 846e57de586355c80ff488fc7fd4f7b9462b465d Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Thu, 20 Oct 2016 00:55:25 +0300 Subject: [PATCH] [core] Avoid duplicating edges for CollisionTile Make 'edges' static to avoid every instance of CollisionTile having its own copy of it. --- src/mbgl/text/collision_tile.cpp | 38 ++++++++++++++------------------ src/mbgl/text/collision_tile.hpp | 1 - 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/mbgl/text/collision_tile.cpp b/src/mbgl/text/collision_tile.cpp index 368158145..aa83cbae4 100644 --- a/src/mbgl/text/collision_tile.cpp +++ b/src/mbgl/text/collision_tile.cpp @@ -11,20 +11,7 @@ namespace mbgl { -auto infinity = std::numeric_limits::infinity(); - -CollisionTile::CollisionTile(PlacementConfig config_) : config(std::move(config_)), - edges({{ - // left - CollisionBox(Point(0, 0), 0, -infinity, 0, infinity, infinity), - // right - CollisionBox(Point(util::EXTENT, 0), 0, -infinity, 0, infinity, infinity), - // top - CollisionBox(Point(0, 0), -infinity, 0, infinity, 0, infinity), - // bottom - CollisionBox(Point(0, util::EXTENT), -infinity, 0, infinity, 0, infinity), - }}) { - +CollisionTile::CollisionTile(PlacementConfig config_) : config(std::move(config_)) { // Compute the transformation matrix. const float angle_sin = std::sin(config.angle); const float angle_cos = std::cos(config.angle); @@ -81,6 +68,17 @@ float CollisionTile::findPlacementScale(float minPlacementScale, const Point::infinity(); + static const std::array edges {{ + // left + CollisionBox(Point(0, 0), 0, -infinity, 0, infinity, infinity), + // right + CollisionBox(Point(util::EXTENT, 0), 0, -infinity, 0, infinity, infinity), + // top + CollisionBox(Point(0, 0), -infinity, 0, infinity, 0, infinity), + // bottom + CollisionBox(Point(0, util::EXTENT), -infinity, 0, infinity, 0, infinity) + }}; float minPlacementScale = minScale; @@ -98,14 +96,10 @@ float CollisionTile::placeFeature(const CollisionFeature& feature, bool allowOve } if (avoidEdges) { - const Point tl = { box.x1, box.y1 }; - const Point tr = { box.x2, box.y1 }; - const Point bl = { box.x1, box.y2 }; - const Point br = { box.x2, box.y2 }; - const Point rtl = util::matrixMultiply(reverseRotationMatrix, tl); - const Point rtr = util::matrixMultiply(reverseRotationMatrix, tr); - const Point rbl = util::matrixMultiply(reverseRotationMatrix, bl); - const Point rbr = util::matrixMultiply(reverseRotationMatrix, br); + const Point rtl = util::matrixMultiply(reverseRotationMatrix, { box.x1, box.y1 }); + const Point rtr = util::matrixMultiply(reverseRotationMatrix, { box.x2, box.y1 }); + const Point rbl = util::matrixMultiply(reverseRotationMatrix, { box.x1, box.y2 }); + const Point rbr = util::matrixMultiply(reverseRotationMatrix, { box.x2, box.y2 }); CollisionBox rotatedBox(box.anchor, util::min(rtl.x, rtr.x, rbl.x, rbr.x), util::min(rtl.y, rtr.y, rbl.y, rbr.y), diff --git a/src/mbgl/text/collision_tile.hpp b/src/mbgl/text/collision_tile.hpp index 49b97cb8c..a2c5220fc 100644 --- a/src/mbgl/text/collision_tile.hpp +++ b/src/mbgl/text/collision_tile.hpp @@ -52,7 +52,6 @@ public: std::array rotationMatrix; std::array reverseRotationMatrix; - std::array edges; private: float findPlacementScale(float minPlacementScale,