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