diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-10-20 00:55:25 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-10-25 08:12:31 +0300 |
commit | 846e57de586355c80ff488fc7fd4f7b9462b465d (patch) | |
tree | eaf2eada2b6551fb0effdc6016dcf26bb419e281 | |
parent | 8743f1134528d5e8e7b0b2af582e11ff5ee3088f (diff) | |
download | qtlocation-mapboxgl-846e57de586355c80ff488fc7fd4f7b9462b465d.tar.gz |
[core] Avoid duplicating edges for CollisionTile
Make 'edges' static to avoid every instance of CollisionTile having its
own copy of it.
-rw-r--r-- | src/mbgl/text/collision_tile.cpp | 38 | ||||
-rw-r--r-- | 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 3681581455..aa83cbae44 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<float>::infinity(); - -CollisionTile::CollisionTile(PlacementConfig config_) : config(std::move(config_)), - edges({{ - // left - CollisionBox(Point<float>(0, 0), 0, -infinity, 0, infinity, infinity), - // right - CollisionBox(Point<float>(util::EXTENT, 0), 0, -infinity, 0, infinity, infinity), - // top - CollisionBox(Point<float>(0, 0), -infinity, 0, infinity, 0, infinity), - // bottom - CollisionBox(Point<float>(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<flo } float CollisionTile::placeFeature(const CollisionFeature& feature, bool allowOverlap, bool avoidEdges) { + static const float infinity = std::numeric_limits<float>::infinity(); + static const std::array<CollisionBox, 4> edges {{ + // left + CollisionBox(Point<float>(0, 0), 0, -infinity, 0, infinity, infinity), + // right + CollisionBox(Point<float>(util::EXTENT, 0), 0, -infinity, 0, infinity, infinity), + // top + CollisionBox(Point<float>(0, 0), -infinity, 0, infinity, 0, infinity), + // bottom + CollisionBox(Point<float>(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<float> tl = { box.x1, box.y1 }; - const Point<float> tr = { box.x2, box.y1 }; - const Point<float> bl = { box.x1, box.y2 }; - const Point<float> br = { box.x2, box.y2 }; - const Point<float> rtl = util::matrixMultiply(reverseRotationMatrix, tl); - const Point<float> rtr = util::matrixMultiply(reverseRotationMatrix, tr); - const Point<float> rbl = util::matrixMultiply(reverseRotationMatrix, bl); - const Point<float> rbr = util::matrixMultiply(reverseRotationMatrix, br); + const Point<float> rtl = util::matrixMultiply(reverseRotationMatrix, { box.x1, box.y1 }); + const Point<float> rtr = util::matrixMultiply(reverseRotationMatrix, { box.x2, box.y1 }); + const Point<float> rbl = util::matrixMultiply(reverseRotationMatrix, { box.x1, box.y2 }); + const Point<float> 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 49b97cb8cb..a2c5220fce 100644 --- a/src/mbgl/text/collision_tile.hpp +++ b/src/mbgl/text/collision_tile.hpp @@ -52,7 +52,6 @@ public: std::array<float, 4> rotationMatrix; std::array<float, 4> reverseRotationMatrix; - std::array<CollisionBox, 4> edges; private: float findPlacementScale(float minPlacementScale, |