您的位置:首页 > 移动开发 > Android开发

[转] 移植Android图形引擎Skia到MIPS平台经验总结(二)

2011-01-25 17:45 453 查看
上一篇文章我已经介绍了,移植Skia的各种条件和对环境的基本配置,这篇文章我将介绍具体的移植Skia的步骤。我的
MIPS平台上面没有IDE的开发环境,移植工作都是在命令行下面做的,需要实现提供Makefile文件。由于Skia的模块化做得比较好,我的代码组织是把Skia分成各个小的子模块,然后为再为每个子模块提供单独的makefile文件,最后把这些子模块的Makefile,汇总到一个
Makefile中,就是Skia库的makefile。
为了完成Core模块的移植工作,首先需要确认那些文件需要要编译,可以参考
Android代码中Skia库Core模块的.mk文件和最新Skia代码中的core模块的makefile文件。基本src/core目录下面的搜有的cpp文本都需要编译。如果前面三个配置文件没有错误的话,这个模块还是比较容易编译通过的。可能不同的平台会有一些细微差距,需要把core里面的编译源文件进行一些裁减,比如我们的MIPS平台没有文件系统,所以与文件系统相关的代码需要去掉,例如
SkFileStream,SkMMapStream类等。一般移植完这个模块之后,Skia的基本功能就可以具备了,比如在内存中绘图都可以进行了。移植到这里你可以验证你的移植成果了(能够看到成果,对我们移植工作是一个鼓舞),因为绘图是在内存中进行,你可以那个这块内存数据,并把他输出到任何设备上面,比如输出到Bitmap文件中(前提是你对bitmap文件结构要比较熟悉),这里就不提供测试代码了(我的测试代码都在单位,代码控制比较严格,拿不出来,郁闷哦)。

移植opt模块,来对性能进行加速。发现代码中没有针对MIPS的加速代码,只能选择SkBitmapProcState_opts_none.cpp,SkBlitRow_opts_none.cpp,SkUtils_opts_none.cpp
三个文件,也就是不进行加速,你可以根据你的平台选择加速文件,或者自己实现加速文件(如果你实现加速文件,请你和我联系,我向你学习)。这个模块比较简单,编译通过没有什么问题。

下面我们可以移植ports模块,这个模块提供与操作系统相关的代码,因为每个os上面字体,线程,事件,时间等等都是有差异的。需要你选择适合你的平台的代码,进行编译。如果你的平台有一些比较特殊的话,可能你还是需要自己进行一些裁减的。比如字体,我们的平台没有提供文件系统,Skia源码中所有的平台实现,都需要文件系统(字体文件),怎么办呢?只能自己实现了,首先把字体文件烧录到ROM里面,然后系统初始化的时候,把他加载到RAM内存中(中文字体文件的话可能需要10M左右的空间,嵌入式设备需要衡量RAM内存的大小),然后自己在这里面修改基于Linux
的字体实现SkFontHost_linux.cpp,移植所有与文件系统相关的代码,然后以内存方式实现之。如果你发现没有合适的实现,也可以选择以
none结尾的实现文件,这些文件都实现了空函数,可以让你编译通过。需要的时候,再想办法实现。

utils模块实现一些工具类,这个模块比较小,参考Android中的.mk文件和官方代码中的makefile,这个模块比较容易移植成功。

下面移植effects模块,这个模块实现一些效果,没有什么特殊的把所有的源码文件全部加入Makefile进行编译,兵来将挡,水来土掩就好了。

images模块主要实现一些和图片有关的功能,比如从图片文件输入数据到Skia库,或者Skia输出数据到图片文件。这个模块需要一些外部库来支持,比如你需要支持png,那么你需要把SkImageDecoder_libpng.cpp加入makefiel文件,这个文件依赖于libpng库,你需要首先移植他到你的平台,这个库在Android源码中有,libpng又依赖于libz。把这些都准备好了,你应该可以编译通过,并且你的Skia支持png文件了。同样道理,加入gif,jpg支持,都需要移植相应的库。移植到这里可以说有阶段性成果了,可以用网上的测试程序来验证了,比如Jserv先生的blog里面的代码。

如果你需要opengl库进行3D(2D是Skia自己实现的)加速的话,那么你需要移植gl模块,前提是你的平台提供opengl实现(软实现或者硬实现)。因为我的平台上面没有
opengl,所以没有移植这个模块。

其他的模块都是可选的,如果你的平台需要你可以移植。这里说一句虽然Skia提供了animator模块,Skia自己都没有用这个子模块,可能还不完善,如果你用的话,需要自己维护哦。views模块,提供一些独立于OS的窗口类,由于我们的平台性能有限,目前不需要。

至此Skia库基本移植成功了。通过上面描述可以看出,只要你对自己的平台特性足够熟悉,掌握正确的方法,移植Skia只要一步一步来移植,还是比较容易移植成功的。

转自 http://my.unix-center.net/~Simon_fu/?p=305
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: