文字填充最后果然没有想到什么有效地优化形态,回归碰撞检测扫描线方式,老老实实的来。c#的性能果然不负所望,低的可以。
填充一个猛字,要花30毫秒左右。和像素填充低于1ms的性能差太多。
排版的问题不是很复杂,以前对freetype很熟悉。之后的管理也已经轻车熟路。
只是我相应的信息还没有从TTF解析,还有一些解析工作要回头去做。
优化空间不大,还是先用多线程彻底的避免字模生成过程干扰逻辑。
其实我已经优化了,本来是有200多毫秒的傲人战绩。
1.生成线段时采用了很低的曲线拆分精度.
2.不是逐点测试,一次扫描一行所有的碰撞点,排序后作为线段绘制。
3.使用简化了的y向扫描判断方法,比判断任意两条线段相交快很多。
还有一些可能的字模渲染优化点:
一 float 运算 变成整数运算。因为牵扯斜率。使用了一些浮点数和除法。想办法简化这部分的计算工作量,可能会有很好的效果。假设1/2时间减少。
二、对线段做二叉管理。曲线的线段太多了。遍历不是个好方法。根据线段y值所在的空间构造二叉树可以减少相当的定位时间,不用遍历每条线段来碰撞。假设1/2时间减少。
虽然也是两项很有意义的优化,但相对需要花的代价也较大。
同时没有处理好的还有微软雅黑的cmap表和三次曲线。
这些留待2.0版本解决。
1.0我想使用一个更直接的方式,多线程。
字模生成独立线程,渲染的时候如果字模没有生成好,占位和排版先用起来,字模随便填个啥。好了再渲染出来。
65%完成度了,有能力的家伙们,现在字模已经能画了,后面的工作已经可以自己搞定了。不过我还是会把他推进到80%滴。
80%定义,可以指定任意字号字符串带排版输出。排版的定义是文字文字正常,空格正常,间距正常。
2010.5.18 凌晨两点。