Extra2D/Extra2D/include/extra2d/asset/msdf_font_loader.h

42 lines
1.1 KiB
C++

#pragma once
#include <extra2d/asset/asset_loader.h>
#include <extra2d/asset/msdf_font_asset.h>
#include <string>
namespace extra2d {
/**
* @brief MSDF 字体加载器
*
* 加载内嵌元数据的 MSDF PNG 图集
*/
class MSDFFontLoader : public AssetLoader<MSDFFontAsset> {
public:
Ref<MSDFFontAsset> load(const std::string& path) override;
Ref<MSDFFontAsset> loadFromMemory(const u8* data, size_t size) override;
bool canLoad(const std::string& path) const override;
AssetType type() const override { return AssetType::Font; }
std::vector<std::string> extensions() const override;
private:
/**
* @brief 解析 PNG 内嵌元数据
*/
bool parseEmbeddedMetadata(const std::string& path, MSDFFontAsset* asset);
/**
* @brief 从 tEXt chunk 读取数据
*/
bool readTextChunk(const std::vector<u8>& pngData,
const std::string& keyword,
std::vector<u8>& output);
/**
* @brief 解析 JSON 元数据
*/
bool parseJsonMetadata(const std::string& json, MSDFFontAsset* asset);
};
} // namespace extra2d