CEGUI中文加载优化

CEGUI中文如何显示这个就不说了,改下字体就OK了。对于中文加载的优化,网上最流行的说法是用一张或二张纹理保存,当新的汉字没有在纹理上的时候,清空纹理重新添加。对于这种方法如果汉字使用率少的话还不错,但是如果对于不同汉字出现频率较高的话,那么这种方法,会出现界面一卡一卡的现象,那就是临时清空重绘纹理的原因。

 

CEGUI根据汉字内码的编码顺序,为每256个字符分配一张纹理(例如编码0-255存放在纹理一,编码768-1023 存放在纹理四)。英文很容易搞定了,那么几个字符一张纹理就够了,对于中文,中文的编码数值太大,CEGUI原本的方法要是加载的话,最少也要上百张纹理。

 

对于以上2种方法,我觉得都不是很好,我目前的解决方法是:512个汉字一张纹理,根据汉字的多少进行分页加载,说白了就是每512汉字放到一张纹理,重写rasterizeEx ,首先定义一个CodepointMap容器 ,保存所有汉字,rasterizeEx 将codepoint作为参数传入,在rasterizeEx 里,填充CodepointMap容器如:CodepointMap容器【codepoint】=FontGlyph (adv);根据自己CodepointMap容器每512个创建一张纹理。这样比如:测试的时候用3000个常用汉字,也就是3000个不同的汉字,字体大小设置18,一张纹理512个汉字,3000个字也就6张纹理就全部保存了起来。在此要注意的是,字体的大小,和存放纹理像素数组(一个全局的即可)的大小,因为如果你的数组定义为512*512的话那么,你的字体太大了,它存不下512个字,就会出错。汉字大小和像素数组如何的合理定义就看自己的需求了。每次有陌生汉字的时候就放到CodepointMap容器里,然后添加到纹理里,当使用的时候,直接拿CodepointMap容器里的数据就可以了。避免了重新绘制。

 

经过测试:18000多个汉字,内含3000多个不同汉字的加载也就20秒。实际上也就是加载那3000多个汉字的时间,其他重复的汉字直接读的已经加载好的数据,几乎没啥时间,虽然很长时间,但是我们真正用的时候,加载的汉字少的可怜,没人会一下把所有汉字全加载的.只是用到的也就是CEGUI界面上的那几个汉字罢了。对于几百个汉字的加载,也就2到3秒

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值