#pragma once #include #include #include #include namespace frostbite2D { // ============================================================================ // 字形信息 // ============================================================================ struct Glyph { float u0, v0; // 纹理坐标左下角 float u1, v1; // 纹理坐标右上角 float width; // 字形宽度(像素) float height; // 字形高度(像素) float bearingX; // 水平偏移 float bearingY; // 垂直偏移 float advance; // 前进距离 }; // ============================================================================ // 字体图集接口 // ============================================================================ class FontAtlas { public: virtual ~FontAtlas() = default; /** * @brief 获取字形信息 * @param codepoint Unicode码点 * @return 字形信息指针 */ virtual const Glyph *getGlyph(char32_t codepoint) const = 0; /** * @brief 获取纹理 * @return 纹理指针 */ virtual class Texture *getTexture() const = 0; /** * @brief 获取字体大小 * @return 字体大小(像素) */ virtual int getFontSize() const = 0; /** * @brief 获取字体上升高度 * @return 上升高度 */ virtual float getAscent() const = 0; /** * @brief 获取字体下降高度 * @return 下降高度 */ virtual float getDescent() const = 0; /** * @brief 获取行间距 * @return 行间距 */ virtual float getLineGap() const = 0; /** * @brief 获取行高 * @return 行高 */ virtual float getLineHeight() const = 0; /** * @brief 计算文字尺寸 * @param text 要测量的文本 * @return 文本的宽度和高度 */ virtual Vec2 measureText(const std::string &text) = 0; /** * @brief 是否支持 SDF 渲染 * @return 支持SDF返回true */ virtual bool isSDF() const = 0; }; } // namespace frostbite2D