硬件加速

可以使用 OpenGL ES 1.1 硬件加速来增强一些应用程序中的图形性能。其中对显示对象进行了动画处理的游戏和其他应用程序可受益于硬件加速。使用硬件加速的应用程序可以将某些图形进程的负载从 CPU 卸载到 iPhone GPU,这可以大大提高性能。

当设计一个应用程序使用 GPU 时,一定要遵循这样的原则,即确保内容是有效支持 GPU 加速的。

要使用硬件加速,请在 Flash Professional CS5 的“iPhone 设置”对话框中的“常规”选项卡上将“呈现”设置为 GPU。也可以在应用程序描述符文件中将 renderMode 属性设置为 gpu

<initialWindow> 
    <renderMode>gpu</renderMode> 
    ...

请参阅 在 Flash Professional CS5 中设置 iPhone 应用程序属性 在应用程序描述符文件中设置 iPhone 应用程序属性

有四类显示对象,如果其内容频繁变化,可在硬件加速中快速呈现。

  • 位图对象

  • 2D 显示对象, cacheAsBitmap 属性设置为 true ,也可以设置 cacheAsBitmapMatrix 属性(参见下面内容)

  • 3D 显示对象(即设置了 z 属性)

  • 使用单一纯色矩形填充以及边缘与屏幕上的像素对齐的显示对象。

当其他 Sprite 在基于矢量的对象上方或下方执行动画效果时,这些对象将重新呈现。因此,充当某个动画的背景或前景的任何对象也应属于这些类别之一。

对于 cacheAsBitmap 设置为 true 的显示对象,设置 cacheAsBitmapMatrix 将导致 GPU 使用通过矩阵转换生成的位图。GPU 将使用位图表示形式,即使旋转或缩放对象也是如此。与 CPU 重绘矢量渲染的对象相比,GPU 合成此位图并为其添加动画效果要快得多。

单独将 cacheAsBitmap 设置为 true 会导致缓存显示对象(以及所有子对象)。新区域暴露或整个组合图形转换时,显示对象不重绘。

设置显示对象的 cacheAsBitmapMatrix 属性后,此应用程序可为其构建表示形式,即使在显示对象不可见时也是如此。在开始下一帧时,此应用程序将为显示对象构建缓存表示形式。然后,当您将显示对象添加到舞台时,此应用程序将快速呈现该对象。此外,应用程序还能够以动画方式快速旋转或缩放对象。对于旋转或缩放的对象,如果还未设置 cacheAsBitmapMatrix 属性,则不要设置 cacheAsBitmap 属性。

对于缓存为位图的对象,应用程序也可以快速执行 alpha 转换。但是,对于硬件加速 alpha 转换,仅支持 0 与 1.0 之间的 alpha 值。这与 colorTransform.alphaMultiplier 设置为 0 到 256 相对应。

对于频繁更新的对象,例如文本字段,请不要将 cacheAsBitmap 属性设置为 true

频繁更改图形内容的显示对象通常不太适合进行 GPU 呈现。在 GPU 功能不太强大的早期设备上尤其如此。相比将图形上载到 GPU 所需的开销,CPU 呈现可能是更好的选择。

重构包含相对于父显示对象移动的子显示对象的显示对象。进行更改,使子显示对象变为与父显示对象同级。这可确保每个对象都有自己的位图表示形式。同时,每个显示对象将能够相对于其他显示对象移动,而无需将新图形上载到 GPU。

在子显示对象没有动画效果的最高级别的显示列表中,将 cacheAsBitmap 属性设置为 true 。换句话说,为不包含移动部分的显示对象容器进行此设置。请不要对子显示对象进行此设置。 请不要 对包含具有动画效果的其他显示对象的 Sprite 进行此设置。

当设置显示对象的 z 属性时,应用程序始终使用缓存的位图表示形式。此外,设置显示对象的 z 属性后,该应用程序将使用缓存的位图表示形式,即使旋转或缩放该对象也是如此。此应用程序不会为设置了 z 属性的显示对象使用 cacheAsBitmapMatrix 属性。相同的规则同样适用于设置任何三维显示对象属性(包括 rotationX rotationY rotationZ transform.matrix3D 属性)的情况。

如果显示对象容器中包含要对其使用硬件加速的内容,请不要设置 scrollRect mask 属性。设置这些属性会对显示对象容器及其子对象禁用硬件加速功能。作为设置 mask 属性的替代选择,将遮罩显示对象置于被遮罩的显示对象之上。

对于可用于硬件加速的显示对象,有大小限制。在旧设备上,宽高均不能超过 1024 像素。在较新的设备上,宽高均不能超过 2048 像素。您可以使用 GPU 呈现诊断工具来测试设备上的性能。

GPU 也使用 iPhone RAM 存储位图图像。它使用的内存至少与位图图像所需的内存相当。

GPU 使用的内存分配是每个位图图像尺寸的 2 的整数次幂。例如,GPU 占用的内存大小可以是 512 x 1024 或 8 x 32。因此 9 x 15 像素的图像的内存使用量与 16 x 16 像素的图像相同。对于缓存的显示对象,您可能想要使用每个方向上接近(但不超过)2 的整数次幂的尺寸。例如,使用 32 x 16 像素的显示对象比使用 33 x 17 像素的显示对象更有效。

不要依赖调整舞台大小来减少为其他平台(例如桌面)保留的资源,而应该使用 cacheAsBitmapMatrix 属性或在发布 iPhone 之前调整资源的大小。3D 对象在缓存表面图像时会忽略 cacheAsBitmapMatrix 属性。因此,如果显示对象将在 3D 表面上呈现,最好在发布之前调整这些显示对象的大小。

硬件加速的优点和 RAM 占用量之间存在一个平衡点。当内存不足时,iPhone 操作系统将通知其他处于运行状态的本机 iPhone 应用程序释放内存。当这些应用程序处理此通知并释放内存时,它们可能与您的应用程序竞争 CPU 循环。这会立刻降低您的应用程序的性能。请确保在较旧的设备上测试您的应用程序,因为这些设备上为您运行的进程提供的内存可能会大大减少。

在 iPhone 上调试应用程序时,可以启用 GPU 呈现诊断功能。此功能帮助您了解应用程序使用 GPU 呈现的状况。有关详细信息,请参阅 调试 iPhone 应用程序 中的“使用 GPU 呈现诊断进行调试”。

有关使用 cacheAsBitmapMatrix 属性的信息,请参阅 特定于移动 AIR 应用程序的 ActionScript API 中的“DisplayObject.cacheAsBitmapMatrix”部分。