#pragma once #include #include #include namespace mln { namespace gfx { using DynamicTexturePtr = std::shared_ptr; class GlyphAtlas { public: GlyphPositions glyphPositions; std::vector textureHandles; DynamicTexturePtr dynamicTexture; }; class ImageAtlas { public: ImagePositions iconPositions; ImagePositions patternPositions; std::vector textureHandles; DynamicTexturePtr dynamicTexture; }; class DynamicTextureAtlas { public: DynamicTextureAtlas(Context& context_) : context(context_) {} ~DynamicTextureAtlas() = default; GlyphAtlas uploadGlyphs(const GlyphMap& glyphs); ImageAtlas uploadIconsAndPatterns(const ImageMap& icons, const ImageMap& patterns, const ImageVersionMap& versionMap); void removeTextures(const std::vector& textureHandles, const DynamicTexturePtr& dynamicTexture); void removeUnusedDynamicTextures(); private: Context& context; std::vector dynamicTextures; std::unordered_map dummyDynamicTexture; std::mutex mutex; }; } // namespace gfx } // namespace mln