转自http://blog.chinaunix.net/u3/99423/showart_2196578.html
1. 2D 图像加速引擎之于 android 系统的必要性:
实验过程:通过在两台智器 q5 上做对比测试,使用操作系统均为 android1.5 版本。其中一台所运行的 android 是日本团队为智器 q5 开发(已打开 2D 加速)显示效果非常流畅。另一台所运行的 android 是我们团队自己移植编译的(没有打开 2D 加速),窗口在拖拉的时候会出现闪烁。
实验结论:基本确认 2D 图形加速引擎对于运行 android 不可缺少。
2. android 对 2D 图像加速引擎的要求:
Android 对底层 2D 图形加速引擎的调用主要是通过两个方面,一个是 copybit ,一个是标准的 OpenGL ES 。
copybit 的硬件要求: 实现 copybit 对硬件的要求不高,它只是基本 2D 功能的子集,包括旋转,放大缩小,颜色 / 像素格式转换(这些特性可以被部分支持)。
OpenGL ES 的硬件要求: 如果是实现标准的 OpenGL 则需要硬件 IP 完整支持 OpenGL ES 。
Android 对这两者的支持在版本上稍有差异,可以从两个方面来讲,一个是 android1.6 版本之前,一个是 android1.6 版本之后。
A. android1.6 之前( cupcake , donut )
在 android1.6 之前(包含 1.6 版本),在 copybit 模块和 OpenGL ES 同时存在时,界面( SurfaceFlinger )会自动优先调用 copybit 模块。
B. android1.6 之后( 2.0 2.1 )
在 donut 版本( android1.6 )之后, copybit 模块不会被界面( SurfaceFlinger )直接调用,而是作为 Open GL ES 1.x 的后端处理使用, SurfaceFlinger 只会被 Open GL ES 的 API 调用。在未来的 android 版本中 copybit 将会被淘汰掉。(官方原话: Eventually, the copybit module will be phased out, instead, we will ask the ISV/OEMs to implement these features on their OpenGL ES drivers, if they think it is necessary. )
3. 结论:
从 android 的角度来看有两种方案: 1 使用 copybit ,这样对 2D 的硬件要求不高,而且在可预见的未来还是能够被 android 支持的。 2 使用 OpenGL 的标准,这是 android 的未来趋势,但是无论在硬件还是软件的实现代价太大。
鉴于此,我个人推荐使用 copybit 。下面是需要实现 android 实现 copybit 对 2D 图形加速引擎具体要求( These features can be supported in full or partially. ):
| 必须支持 | 可选 |
| 颜色格式 RGB_565 | RGBA_8888 BGRA_8888 RGBA_5551 RGBA_4444 YCbCr_422_SP YCbCr_420_SP YCbCr_422_I |
| 旋转 90 ° 180 ° 270 ° x-flip y-flip |
|
| 矩形区域的缩放 |
|
| Alpha blending (可以任意选定两块相同大小区域作为源) |
|
| Bitblt |
|
| Clip 剪切 |
|
|
| DITHER |
|
| 不同颜色格式间的转换 |
注:必须支持是指 copybit 源代码中已包括的常见操作,且一般主流的 2D 图形加速引擎都会支持的特性。可选是指 copybit 源码中已经包括了这个特性,但有些厂商没有为他们的 2D 图形引擎驱动实现,如有余力建议加上。