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

上一篇文章我已经介绍了,移植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

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值