天天看点

hwui文字绘制详解

字体绘制简介:

hwui文字绘制详解

hwui中绘制字体的主要是通过FontRenderer这个类来进行绘制,这个类中保存了当前最近使用的字体信息类Font的列表,在Font类中保存了当前绘制需要的文字信息CachedGlyphInfo类列表,同时FontRenderer这个类保存了当前使用的文字纹理缓存CacheTexture类的列表,这个类用于保存当前需要绘制的文字的纹理信息,也就是当需要绘图的时候,首先将会通过skia中去取得当前每个字的纹理内存,然后将这个字的纹理内存拷贝到CacheTexture中保存,接着只要将每个字的对应的大小和纹理的uv坐标以及对应的CacheTexture保存在CachedGlyphInfo,这样后面字体绘制的时候,只需要将这几块大的纹理缓存上传到gpu,同时将文字的uv坐标上传绘制即可,同时通过这种方式,能够一次性绘制同一批次的文字,从而避免了绘制每个字每次纹理上传和每次的绘制,能够极大的提升文字绘制的性能。

绘制流程:

hwui文字绘制详解

如图所示,当canvas调用drawText的时候,这时hwui将会将这条绘制指令存储在一个displayList中,同时hwui还加了一个延时渲染的优化,将文字类的绘制都合成到一个批次中进行绘制,需要绘制文字的时候,将会调用drawText函数进行具体的绘制实现。首先将会根据当前绘制文字的paint去创建对应的Font,如果是以前已经创建过的就返回,否则就创建一个新的font,这个font的对象是在FontRender这个类中通过LRU来进行管理的。当绘制的文字是带阴影的时候,首先将会去通过文字去生成对应的阴影。

继续阅读