#pragma once #include #include #include #include #include #include #include namespace mbgl { template class Actor; namespace gfx { class UploadPass; } // namespace gfx class PatternAtlas { public: PatternAtlas(); PatternAtlas(const PatternAtlas&) = delete; PatternAtlas& operator=(const PatternAtlas&) = delete; ~PatternAtlas(); optional getPattern(const std::string&) const; optional 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; } bool isEmpty() const { return patterns.empty(); } private: struct Pattern { mapbox::Bin* bin; ImagePosition position; }; mapbox::ShelfPack shelfPack; std::unordered_map patterns; PremultipliedImage atlasImage; mbgl::optional atlasTexture; bool dirty = true; }; } // namespace mbgl