FreeType 的缓存.txt 你妈生你的时候是不是把人给扔了把胎盘养大?别把虾米不当海鲜。别把虾米不当海鲜。 FreeType 的缓存子系统提供了一个高性能的管理face、 size、 glyph image 和 charmap 的途径。 I. Requirements and Design Goals: When dealing with fonts, caching rapidly becomes a necessity for at least the following reasons: 当处理字体时,高速缓存是必要的,原因如下: l 打开字体文件是相当慢的,因为它需要加载数据到内存中。所以,尽可能地保持FT_Face 对象处于打开状态是一个好主意。 l 每一个FT_Face 或 FT_Size 对象会占用几百KB, 假设它总是很大,应该限制打开的 face 的个数到最小。 l 每个face 包含成百上千的字形,由于通常只是使用一个face 中的一小部分字形,一次性加载所有的字形是完全没有必要的。应该缓存我们经常使用的字形。 l 当属于给定face 的所有字形已经载入内存时,对应的FT_Face 对象可以被关闭已减少内存的占用。 FreeType 缓存子系统提供了自动完成上述任务的很好的途径。 II. The Cache Manager: FTC_Manager 用于处理缓存中的各种数据。应首先调用FTC_Manager_New 来创建它。 1. 通过FTC_FaceID 鉴别face: FTC_Manager 并不直接知晓哪些字体被安装了或者在运行期是否有效。应用程序有责任定位和鉴别face,并打开相应的字体文件。这意味着应用程序必须使用一个指针(FTC_FaceID)来唯一鉴别一个给定的有效的或已安装的face。 虽然这个指针对于FTC_Manager 来说并不重要, 但是它们的值在程序运行期必须始终保持不变,用于关联缓存的数据和它们相应的face。 应用程序也必须提供(在FTC_Manager_New 期间)一个专门的回调函数FTC_Face_Requester。这个外观请求器管理从一个给定的FTC_FaceID 转换到一个新FT_Face 对象,这通常暗示着调用 FT_New_Face 或 FT_Open_Face。 大多数情况下,FTC_FaceID 指向一个包含着字体文件名和face index 的结构。 In most cases, a FTC_FaceID is a pointer to a structure that contains a file pathname and a face index, and where the face requester simply calls FT_New_Face, as illustrated by the following code: /* define custom face identification structure */ typedef struct MyFaceRec_ { const char* file_path...