summaryrefslogtreecommitdiff
path: root/src/mbgl/sprite
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-09-06 12:35:31 +0200
committerKonstantin Käfer <mail@kkaefer.com>2016-09-07 17:56:38 +0200
commitff0c895eaa9e8b0bbe5739550e54230b0286a757 (patch)
tree95292bbbfe49335eea14f9c0766077bf834d706a /src/mbgl/sprite
parent426242fe412057e2a6572e100e652e31917da419 (diff)
downloadqtlocation-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.cpp22
-rw-r--r--src/mbgl/sprite/sprite_atlas.hpp14
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;