diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-02-13 16:05:26 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-02-14 16:28:12 -0600 |
commit | d819ece74c52658c68d4e297c9bef5a74f739e28 (patch) | |
tree | 3f5af4a976546db7b811522c62c5ab0b504837a2 /src/mbgl/sprite | |
parent | 58de1e15c5e3f4983f445eacefb2fcc931371788 (diff) | |
download | qtlocation-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.cpp | 50 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.hpp | 20 |
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); |