summaryrefslogtreecommitdiff
path: root/src/mbgl/sprite
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-02-13 16:05:26 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-02-14 16:28:12 -0600
commitd819ece74c52658c68d4e297c9bef5a74f739e28 (patch)
tree3f5af4a976546db7b811522c62c5ab0b504837a2 /src/mbgl/sprite
parent58de1e15c5e3f4983f445eacefb2fcc931371788 (diff)
downloadqtlocation-mapboxgl-d819ece74c52658c68d4e297c9bef5a74f739e28.tar.gz
[core] Combine SpriteAtlas::getPosition with SpriteAtlas::getImage
Diffstat (limited to 'src/mbgl/sprite')
-rw-r--r--src/mbgl/sprite/sprite_atlas.cpp50
-rw-r--r--src/mbgl/sprite/sprite_atlas.hpp20
2 files changed, 29 insertions, 41 deletions
diff --git a/src/mbgl/sprite/sprite_atlas.cpp b/src/mbgl/sprite/sprite_atlas.cpp
index 1ca40f6c2d..b712fc8742 100644
--- a/src/mbgl/sprite/sprite_atlas.cpp
+++ b/src/mbgl/sprite/sprite_atlas.cpp
@@ -27,6 +27,23 @@ struct SpriteAtlas::Loader {
std::unique_ptr<AsyncRequest> spriteRequest;
};
+SpriteAtlasElement::SpriteAtlasElement(Rect<uint16_t> rect_,
+ std::shared_ptr<const SpriteImage> image_,
+ Size size_, float pixelRatio)
+ : pos(std::move(rect_)),
+ spriteImage(std::move(image_)),
+ relativePixelRatio(spriteImage->pixelRatio / pixelRatio) {
+
+ const float padding = 1;
+
+ const float w = spriteImage->getWidth() * relativePixelRatio;
+ const float h = spriteImage->getHeight() * relativePixelRatio;
+
+ size = {{ float(spriteImage->getWidth()), spriteImage->getHeight() }};
+ tl = {{ float(pos.x + padding) / size_.width, float(pos.y + padding) / size_.height }};
+ br = {{ float(pos.x + padding + w) / size_.width, float(pos.y + padding + h) / size_.height }};
+}
+
SpriteAtlas::SpriteAtlas(Size size_, float pixelRatio_)
: size(std::move(size_)),
pixelRatio(pixelRatio_),
@@ -192,7 +209,8 @@ optional<SpriteAtlasElement> SpriteAtlas::getImage(const std::string& name,
return SpriteAtlasElement {
*entry.iconRect,
entry.spriteImage,
- entry.spriteImage->pixelRatio / pixelRatio
+ size,
+ pixelRatio
};
}
@@ -200,7 +218,8 @@ optional<SpriteAtlasElement> SpriteAtlas::getImage(const std::string& name,
return SpriteAtlasElement {
*entry.patternRect,
entry.spriteImage,
- entry.spriteImage->pixelRatio / pixelRatio
+ size,
+ pixelRatio
};
}
@@ -233,31 +252,8 @@ optional<SpriteAtlasElement> SpriteAtlas::getImage(const std::string& name,
return SpriteAtlasElement {
rect,
entry.spriteImage,
- entry.spriteImage->pixelRatio / pixelRatio
- };
-}
-
-optional<SpriteAtlasPosition> SpriteAtlas::getPosition(const std::string& name,
- const SpritePatternMode mode) {
- std::lock_guard<std::recursive_mutex> lock(mutex);
-
- auto img = getImage(name, mode);
- if (!img) {
- return {};
- }
-
- auto rect = (*img).pos;
-
- const float padding = 1;
- auto spriteImage = (*img).spriteImage;
-
- const float w = spriteImage->getWidth() * (*img).relativePixelRatio;
- const float h = spriteImage->getHeight() * (*img).relativePixelRatio;
-
- return SpriteAtlasPosition {
- {{ float(spriteImage->getWidth()), spriteImage->getHeight() }},
- {{ float(rect.x + padding) / size.width, float(rect.y + padding) / size.height }},
- {{ float(rect.x + padding + w) / size.width, float(rect.y + padding + h) / size.height }}
+ size,
+ pixelRatio
};
}
diff --git a/src/mbgl/sprite/sprite_atlas.hpp b/src/mbgl/sprite/sprite_atlas.hpp
index d839109a24..124d0ae294 100644
--- a/src/mbgl/sprite/sprite_atlas.hpp
+++ b/src/mbgl/sprite/sprite_atlas.hpp
@@ -23,21 +23,17 @@ namespace gl {
class Context;
} // namespace gl
-class SpriteImage;
-class SpritePosition;
-
-class SpriteAtlasPosition {
-public:
- std::array<float, 2> size = {{ 0, 0 }};
- std::array<float, 2> tl = {{ 0, 0 }};
- std::array<float, 2> br = {{ 0, 0 }};
-};
-
class SpriteAtlasElement {
public:
+ SpriteAtlasElement(Rect<uint16_t>, std::shared_ptr<const SpriteImage>, Size size, float pixelRatio);
+
Rect<uint16_t> pos;
std::shared_ptr<const SpriteImage> spriteImage;
+
float relativePixelRatio;
+ std::array<float, 2> size;
+ std::array<float, 2> tl;
+ std::array<float, 2> br;
};
enum class SpritePatternMode : bool {
@@ -78,10 +74,6 @@ public:
// the resulting icon measurements. If not, returns an empty optional.
optional<SpriteAtlasElement> getImage(const std::string& name, SpritePatternMode mode);
- // This function is used for getting the position during render time.
- optional<SpriteAtlasPosition> getPosition(const std::string& name,
- SpritePatternMode mode = SpritePatternMode::Single);
-
// Binds the atlas texture to the GPU, and uploads data if it is out of date.
void bind(bool linear, gl::Context&, gl::TextureUnit unit);