summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/pattern_atlas.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/pattern_atlas.hpp')
-rw-r--r--src/mbgl/renderer/pattern_atlas.hpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/mbgl/renderer/pattern_atlas.hpp b/src/mbgl/renderer/pattern_atlas.hpp
new file mode 100644
index 0000000000..f39ba25233
--- /dev/null
+++ b/src/mbgl/renderer/pattern_atlas.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include <mapbox/shelf-pack.hpp>
+#include <mbgl/gfx/texture.hpp>
+#include <mbgl/renderer/image_atlas.hpp>
+#include <mbgl/style/image_impl.hpp>
+#include <mbgl/util/optional.hpp>
+
+#include <unordered_map>
+#include <string>
+
+namespace mbgl {
+
+template <class T>
+class Actor;
+
+namespace gfx {
+class UploadPass;
+} // namespace gfx
+
+class PatternAtlas {
+public:
+ PatternAtlas();
+ PatternAtlas(const PatternAtlas&) = delete;
+ PatternAtlas& operator=(const PatternAtlas&) = delete;
+ ~PatternAtlas();
+
+ optional<ImagePosition> getPattern(const std::string&) const;
+ optional<ImagePosition> addPattern(const style::Image::Impl&);
+ void removePattern(const std::string&);
+
+ gfx::TextureBinding textureBinding() const;
+
+ void upload(gfx::UploadPass&);
+ Size getPixelSize() const;
+
+ const PremultipliedImage& getAtlasImageForTests() const {
+ return atlasImage;
+ }
+
+private:
+ struct Pattern {
+ mapbox::Bin* bin;
+ ImagePosition position;
+ };
+ mapbox::ShelfPack shelfPack;
+ std::unordered_map<std::string, Pattern> patterns;
+ PremultipliedImage atlasImage;
+ mbgl::optional<gfx::Texture> atlasTexture;
+ bool dirty = true;
+};
+
+} // namespace mbgl