#pragma once #include #include #include namespace extra2d { /** * @brief MSDF 字体加载器 * * 加载内嵌元数据的 MSDF PNG 图集 */ class MSDFFontLoader : public AssetLoader { public: Ref load(const std::string& path) override; Ref 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 extensions() const override; private: /** * @brief 解析 PNG 内嵌元数据 */ bool parseEmbeddedMetadata(const std::string& path, MSDFFontAsset* asset); /** * @brief 从 tEXt chunk 读取数据 */ bool readTextChunk(const std::vector& pngData, const std::string& keyword, std::vector& output); /** * @brief 解析 JSON 元数据 */ bool parseJsonMetadata(const std::string& json, MSDFFontAsset* asset); }; } // namespace extra2d