diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-09-06 12:35:31 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-09-07 17:56:38 +0200 |
commit | ff0c895eaa9e8b0bbe5739550e54230b0286a757 (patch) | |
tree | 95292bbbfe49335eea14f9c0766077bf834d706a /src/mbgl/sprite | |
parent | 426242fe412057e2a6572e100e652e31917da419 (diff) | |
download | qtlocation-mapboxgl-ff0c895eaa9e8b0bbe5739550e54230b0286a757.tar.gz |
[core] change bool wrap/repeating to enum class SpritePatternMode
Diffstat (limited to 'src/mbgl/sprite')
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.cpp | 22 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.hpp | 14 |
2 files changed, 22 insertions, 14 deletions
diff --git a/src/mbgl/sprite/sprite_atlas.cpp b/src/mbgl/sprite/sprite_atlas.cpp index 05b713f454..d346464b51 100644 --- a/src/mbgl/sprite/sprite_atlas.cpp +++ b/src/mbgl/sprite/sprite_atlas.cpp @@ -46,10 +46,11 @@ Rect<SpriteAtlas::dimension> SpriteAtlas::allocateImage(const SpriteImage& sprit return rect; } -optional<SpriteAtlasElement> SpriteAtlas::getImage(const std::string& name, const bool wrap) { +optional<SpriteAtlasElement> SpriteAtlas::getImage(const std::string& name, + const SpritePatternMode mode) { std::lock_guard<std::recursive_mutex> lock(mtx); - auto rect_it = images.find({ name, wrap }); + auto rect_it = images.find({ name, mode }); if (rect_it != images.end()) { return SpriteAtlasElement { rect_it->second.pos, rect_it->second.spriteImage, rect_it->second.spriteImage->pixelRatio / pixelRatio }; } @@ -67,16 +68,17 @@ optional<SpriteAtlasElement> SpriteAtlas::getImage(const std::string& name, cons return {}; } - const Holder& holder = images.emplace(Key{ name, wrap }, Holder{ sprite, rect }).first->second; - copy(holder, wrap); + const Holder& holder = images.emplace(Key{ name, mode }, Holder{ sprite, rect }).first->second; + copy(holder, mode); return SpriteAtlasElement { rect, sprite, sprite->pixelRatio / pixelRatio }; } -optional<SpriteAtlasPosition> SpriteAtlas::getPosition(const std::string& name, bool repeating) { +optional<SpriteAtlasPosition> SpriteAtlas::getPosition(const std::string& name, + const SpritePatternMode mode) { std::lock_guard<std::recursive_mutex> lock(mtx); - auto img = getImage(name, repeating); + auto img = getImage(name, mode); if (!img) { return {}; } @@ -98,13 +100,13 @@ optional<SpriteAtlasPosition> SpriteAtlas::getPosition(const std::string& name, void copyBitmap(const uint32_t *src, const uint32_t srcStride, const uint32_t srcX, const uint32_t srcY, uint32_t *const dst, const uint32_t dstStride, const uint32_t dstX, const uint32_t dstY, int dstSize, - const int width, const int height, const bool wrap) { + const int width, const int height, const SpritePatternMode mode) { int srcI = srcY * srcStride + srcX; int dstI = dstY * dstStride + dstX; int x, y; - if (wrap) { + if (mode == SpritePatternMode::Repeating) { // add 1 pixel wrapped padding on each side of the image dstI -= dstStride; for (y = -1; y <= height; y++, srcI = ((y + height) % height + srcY) * srcStride + srcX, dstI += dstStride) { @@ -124,7 +126,7 @@ void copyBitmap(const uint32_t *src, const uint32_t srcStride, const uint32_t sr } } -void SpriteAtlas::copy(const Holder& holder, const bool wrap) { +void SpriteAtlas::copy(const Holder& holder, const SpritePatternMode mode) { if (!data) { data = std::make_unique<uint32_t[]>(pixelWidth * pixelHeight); std::fill(data.get(), data.get() + pixelWidth * pixelHeight, 0); @@ -138,7 +140,7 @@ void SpriteAtlas::copy(const Holder& holder, const bool wrap) { copyBitmap(srcData, uint32_t(holder.spriteImage->image.width), 0, 0, dstData, pixelWidth, (holder.pos.x + padding) * pixelRatio, (holder.pos.y + padding) * pixelRatio, pixelWidth * pixelHeight, - uint32_t(holder.spriteImage->image.width), uint32_t(holder.spriteImage->image.height), wrap); + uint32_t(holder.spriteImage->image.width), uint32_t(holder.spriteImage->image.height), mode); dirty = true; } diff --git a/src/mbgl/sprite/sprite_atlas.hpp b/src/mbgl/sprite/sprite_atlas.hpp index b58a16ab53..d7901244cb 100644 --- a/src/mbgl/sprite/sprite_atlas.hpp +++ b/src/mbgl/sprite/sprite_atlas.hpp @@ -35,6 +35,11 @@ struct SpriteAtlasElement { float relativePixelRatio; }; +enum class SpritePatternMode : bool { + Single = false, + Repeating = true, +}; + class SpriteAtlas : public util::noncopyable { public: typedef uint16_t dimension; @@ -44,10 +49,11 @@ public: // If the sprite is loaded, copies the requsted image from it into the atlas and returns // the resulting icon measurements. If not, returns an empty optional. - optional<SpriteAtlasElement> getImage(const std::string& name, const bool wrap); + 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, bool repeating = false); + 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::ObjectStore&, gl::Config&, uint32_t unit); @@ -80,10 +86,10 @@ private: const Rect<dimension> pos; }; - using Key = std::pair<std::string, bool>; + using Key = std::pair<std::string, SpritePatternMode>; Rect<SpriteAtlas::dimension> allocateImage(const SpriteImage&); - void copy(const Holder& holder, const bool wrap); + void copy(const Holder& holder, SpritePatternMode mode); std::recursive_mutex mtx; SpriteStore& store; |