TGFX (Tencent Graphics) 是一个轻量级 2D 图形库,设计用于渲染文本、几何图形和图像。它提供高性能的 API,可在各种 GPU 硬件和软件平台上运行,包括 iOS、Android、macOS、Windows、Linux、Web 等。
TGFX 最初是作为 PAG 项目的核心组件创建的,从 4.0 版开始成为 libpag 库的默认图形引擎。它的主要目标是在保持更小二进制文件大小的同时,为 Skia 图形库提供令人信服的替代方案。随着时间的推移,它已被许多其他产品采用,如 Hippy、腾讯文档和各种视频编辑应用程序。
包体优化
TGFX 最终以 400K 左右的大小覆盖了 Skia 近 2M 包体的绝大部分功能。核心优化策略主要有两点:
调度优化
TGFX 并不只是做 Skia 的简化,还把一些在业务上调用起来非常复杂的通用性流程进行了抽象封装:
在性能和架构方面,还做了这些额外的优化:
- 默认开启了 HardwareBuffer 的支持,来全面加速纹理的提交,包括 Android 端。
- 暴露了引擎内部 Path 对应的 GPU 高速缓存,避免矢量绘制充分进行三角剖分操作。
- GPU 对象支持在任意线程释放,等关联的上下文激活时才清理,避免随机 Crash 问题。
- 约束图片解码完会尽可能只缓存 GPU 的纹理部分,理论上全局可以降低一半的内存占用。
- 将绝大部分缓存都交给了上层业务精确管理,避免随机绘制的缓存持续占用额外的内存。
- 在全平台都实现了默认字体的读取能力,包括浏览器,避免下载上百兆 CJK 字体的压力。
- 增加了对各种硬解视频帧格式的直接绘制能力,可以一次性上屏无需通过 CPU 转换格式。
- 放弃了 SKSL 的统一 Shader 语言设计,更加符合原生接口调用习惯,既节省了包体,也减少了 GPU Program 的编译耗时。
评论