summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-10-20 00:55:25 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-10-25 08:12:31 +0300
commit846e57de586355c80ff488fc7fd4f7b9462b465d (patch)
treeeaf2eada2b6551fb0effdc6016dcf26bb419e281
parent8743f1134528d5e8e7b0b2af582e11ff5ee3088f (diff)
downloadqtlocation-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.cpp38
-rw-r--r--src/mbgl/text/collision_tile.hpp1
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,