42 lines
1.1 KiB
C++
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
|