這個緩存池,主要是用來做字體圖元和其他小圖元的貼圖緩存用的。
緩存池由數個級別的貼圖池組成,每個貼圖池中有數張大小一致的正方形貼圖(2的N次方的邊長)。
每個正方形貼圖被分成16*16的小塊。每個塊給一個BYTE描述的編號。每張貼圖有一個WORD描述的編號。
當添加一個緩存項時,先根據緩存項的最小邊長和最大邊長確定緩存池的級別。然后搜索貼圖上的格子,看是否有能夠容納這個圖元的連續的格子。如果找到,就保存開始編號和結束編號到緩存項里。如果未找到就擴展當前級別池的貼圖。然后鎖住貼圖,拷貝或者生成圖元像素。最后,根據池的級別,貼圖的編號和開始格子編號,生成一個緩存項ID,返回給調用者。
渲染時,根據緩存項ID定位到緩存項,并根據緩存項中的開始和結束格子編號生成貼圖的UV。
可以優化的地方:1- 把長度超過緩存貼圖邊長的圖元切成數段,緩存到貼圖里。
2- 將渲染請求緩存起來,根據貼圖排序后,再進行渲染。減少切換次數。
實例:下圖中文字的CACHE分布的貼圖被顯示出來。可以清楚的看到,一些橫向和縱向的圖元,被分部到最小的CACHE貼圖里。
