DrawText的效率如何!?
用DDRAW,在后台页面上调用了较多的DrawText API,FPS为26左右,
注释掉这些DRAWTEXT调用,FPS变为70左右,DrawText的效率如此低下,
可另有途径在不太影响效率下提高文本绘制的速度!?
问题点数:50、回复次数:10Top
1 楼snwcwt(风舞影天)回复于 2003-11-02 21:16:05 得分 0
upTop
2 楼vnix()回复于 2003-11-02 22:17:23 得分 10
我听别人说好象可以用FREETYPE字体,将文字转换成图片显示,不过我也没试过。
另外,TextOut的效率与DRAWTEXT相比如何?Top
3 楼snwcwt(风舞影天)回复于 2003-11-03 00:37:33 得分 0
不相上下,我最开始是自己写了个函数计算的文本的宽度来计算折行,然后再用TextOut输出,
换成DrawText后两者的FPS一样Top
4 楼snwcwt(风舞影天)回复于 2003-11-03 00:38:32 得分 0
我朋友说他们公司的游戏是将字形存在内存里的,看来想提速也只好这样做了
过几天再结贴吧,希望能看见期他人的意见Top
5 楼subzero(赘姆烂壳)回复于 2003-11-03 01:04:45 得分 15
字种类不多的话,转成图片bltfastTop
6 楼KingofMagic(大魔头)回复于 2003-11-03 13:02:00 得分 25
TextOut是要先锁定表面,所以很慢
一个好的办法是,另外建一个数组,将数组里的字先TextOut到一个图片A,显示另一个字时,先看数组里是否有此字,如有将图片A相应的图片拷到屏幕,如没有的话在TextOut到图片A上。
因为拷图片是很快的Top
7 楼vnix()回复于 2003-11-03 15:50:11 得分 0
如果是随机的汉字呢,比如需要用户输入的,该用什么方法呢?Top
8 楼snwcwt(风舞影天)回复于 2003-11-04 00:05:38 得分 0
to vnix:
需要用户输入的也很容易解决啊
比如建立一个map,当用户输入字符时根据它的编码来查询是否有这个汉字的图片,有则直接输出,无的话TextOut到一个surface上,然后设定相应的map。
不知道stl的map对这种操作的效率如何,我对STL一点都不熟,呵呵Top
9 楼KingofMagic(大魔头)回复于 2003-11-04 09:26:05 得分 0
我说的和snwcwt(风舞影天)说的结合起来就是最好的
TextOut到一个surface上,然后设定相应的map,虽然很费时间,但是TextOut上去后,以后就是拷贝了
Top
10 楼snwcwt(风舞影天)回复于 2003-11-05 01:04:35 得分 0
或者就是将所有的字形存入一个文件(当然这样在游戏中能用的字体灵活性就不大了)
其实字形也不多,从0到128,128+128*256(129-255,第二个字节1-255)个字形,假设汉字为
12*12px,一共需要128*(12/2)*12+128*256*12*12=9216+4718592=4727808个象素点,字体颜色可变,那么用位来存储就只需要4727808/8=590976个字节,当然如果一个字能够按8个点对齐的话就较好计算,128*1*12+128*256*2*12=1536+786432=787968,然后设置一些相关的文件头信息,占内存也不是很大哦。Top




