这个缓存池,主要是用来做字体图元和其他小图元的贴图缓存用的。
缓存池由数个级别的贴图池组成,每个贴图池中有数张大小一致的正方形贴图(2的N次方的边长)。
每个正方形贴图被分成16*16的小块。每个块给一个BYTE描述的编号。每张贴图有一个WORD描述的编号。
当添加一个缓存项时,先根据缓存项的最小边长和最大边长确定缓存池的级别。然后搜索贴图上的格子,看是否有能够容纳这个图元的连续的格子。如果找到,就保存开始编号和结束编号到缓存项里。如果未找到就扩展当前级别池的贴图。然后锁住贴图,拷贝或者生成图元像素。最后,根据池的级别,贴图的编号和开始格子编号,生成一个缓存项ID,返回给调用者。
渲染时,根据缓存项ID定位到缓存项,并根据缓存项中的开始和结束格子编号生成贴图的UV。
可以优化的地方:1- 把长度超过缓存贴图边长的图元切成数段,缓存到贴图里。
2- 将渲染请求缓存起来,根据贴图排序后,再进行渲染。减少切换次数。
实例:下图中文字的CACHE分布的贴图被显示出来。可以清楚的看到,一些横向和纵向的图元,被分部到最小的CACHE贴图里。