diff options
Diffstat (limited to 'src/mbgl/renderer/pattern_atlas.hpp')
-rw-r--r-- | src/mbgl/renderer/pattern_atlas.hpp | 53 |
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 |