diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-05-29 16:06:56 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-06-04 15:28:00 +0300 |
commit | a9abc43510b4206ffa9c54c3d4c9aa2ed0d1cfce (patch) | |
tree | fc7aa8330560a1beac6b3866b2b838477795e6e4 /src/mbgl/renderer/pattern_atlas.hpp | |
parent | c0e5632001a0eb656857fed6fa8fb9e42d3e205e (diff) | |
download | qtlocation-mapboxgl-a9abc43510b4206ffa9c54c3d4c9aa2ed0d1cfce.tar.gz |
[core] Introduce PatternAtlas
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 |