Files
MapLibreParticleLab/include/mbgl/gfx/dynamic_texture_atlas.hpp
Alex Cristici 8a81444c43 Implement dynamic texture atlas (#3198)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bart Louwers <bart@emeel.net>
Co-authored-by: Bart Louwers <bart.louwers@gmail.com>
2025-05-14 18:38:47 +03:00

50 lines
1.3 KiB
C++

#pragma once
#include <mbgl/gfx/dynamic_texture.hpp>
#include <mbgl/text/glyph.hpp>
#include <mbgl/style/image_impl.hpp>
namespace mbgl {
namespace gfx {
using DynamicTexturePtr = std::shared_ptr<gfx::DynamicTexture>;
class GlyphAtlas {
public:
GlyphPositions glyphPositions;
std::vector<TextureHandle> textureHandles;
DynamicTexturePtr dynamicTexture;
};
class ImageAtlas {
public:
ImagePositions iconPositions;
ImagePositions patternPositions;
std::vector<TextureHandle> 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<TextureHandle>& textureHandles, const DynamicTexturePtr& dynamicTexture);
private:
Context& context;
std::vector<DynamicTexturePtr> dynamicTextures;
std::unordered_map<TexturePixelType, DynamicTexturePtr> dummyDynamicTexture;
std::mutex mutex;
};
} // namespace gfx
} // namespace mbgl