饭中淹的避难所~~~~~

偶尔来避难的地方~

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  94 随笔 :: 0 文章 :: 257 评论 :: 0 Trackbacks
这个缓存池,主要是用来做字体图元和其他小图元的贴图缓存用的。
缓存池由数个级别的贴图池组成,每个贴图池中有数张大小一致的正方形贴图(2的N次方的边长)。
每个正方形贴图被分成16*16的小块。每个块给一个BYTE描述的编号。每张贴图有一个WORD描述的编号。
当添加一个缓存项时,先根据缓存项的最小边长和最大边长确定缓存池的级别。然后搜索贴图上的格子,看是否有能够容纳这个图元的连续的格子。如果找到,就保存开始编号和结束编号到缓存项里。如果未找到就扩展当前级别池的贴图。然后锁住贴图,拷贝或者生成图元像素。最后,根据池的级别,贴图的编号和开始格子编号,生成一个缓存项ID,返回给调用者。
渲染时,根据缓存项ID定位到缓存项,并根据缓存项中的开始和结束格子编号生成贴图的UV。
可以优化的地方:1- 把长度超过缓存贴图边长的图元切成数段,缓存到贴图里。
2- 将渲染请求缓存起来,根据贴图排序后,再进行渲染。减少切换次数。


实例:下图中文字的CACHE分布的贴图被显示出来。可以清楚的看到,一些横向和纵向的图元,被分部到最小的CACHE贴图里。


posted on 2011-04-13 10:12 饭中淹 阅读(1788) 评论(0)  编辑 收藏 引用 所属分类: 游戏客户端数据算法分析

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理