Аппаратное ускорение

Для повышения производительности графики в некоторых приложениях можно использовать аппаратное ускорение OpenGL ES 1.1. Аппаратное ускорение позволяет улучшить работу игр и других приложений с анимированными экранными объектами. Приложения, использующие аппаратное ускорение, могут передавать обработку некоторых графических процессов с центрального процессора на графический процессор iPhone, что позволяет значительно улучшить производительность.

При разработке программы, использующей графический процессор, необходимо следовать правилам, обеспечивающим эффективное аппаратное ускорение содержимого.

Для применения аппаратного ускорения задайте для визуализации значение «Графический процессор» (во Flash Professional CS5 откройте диалоговое окно «Настройки iPhone» и перейдите на вкладку «Общие»). Также можно задать свойству renderMode значение gpu в файле дескриптора приложения.

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

См. разделы « Настройка свойств приложения iPhone во Flash Professional CS5 » и « Настройка свойств приложения iPhone в файле дескриптора приложения ».

Существует четыре класса экранных объектов, которые быстро обрабатываются с помощью аппаратного ускорения, если их содержимое изменяется не слишком часто:

  • растровые изображения;

  • экранные 2D-объекты, у которых свойство cacheAsBitmap имеет значение true и задано необязательное свойство cacheAsBitmapMatrix (см. ниже);

  • экранные 3D-объекты (т. е. объекты, у которых задано свойство z );

  • экранные объекты, представляющие собой прямоугольник с одноцветной заливкой, края которого выровнены по пикселям экрана.

При анимации спрайта, лежащего за или перед векторным объектом, выполняется повторная визуализация этого векторного объекта. Таким образом, объекты, которые выполняют роль заднего или переднего плана анимации, также должны относиться к одной из этих категорий.

Если у экранного объекта свойство cacheAsBitmap имеет значение true , свойство cacheAsBitmapMatrix указывает графическому процессору, что следует использовать растровое изображение, полученное в результате преобразования матрицы. Растровое представление используется, даже если объект повернут, растянут или сжат. Графический процессор способен совместить и анимировать растровое изображение гораздо быстрее, чем ЦП перерисует векторный объект.

Если параметр cacheAsBitmap имеет значение true , экранный объект и все его дочерние объекты кэшируются. Экранный объект не перерисовывается при отображении новых областей или переводе комбинированной графики.

Когда задано свойство cacheAsBitmapMatrix экранного объекта, приложение может создать представление этого объекта, даже если он невидимый. Приложение создает кэшированное представление экранного объекта в начале следующего кадра. Когда экранный объект добавляется в рабочую область, приложение быстро выполняет визуализацию. Кроме того, анимация, вращение и масштабирование объекта также занимает гораздо меньше времени. Если объект вращается или масштабируется, вместе со свойством cacheAsBitmap обязательно задайте свойство cacheAsBitmapMatrix .

Программа может также быстро выполнять трансформации альфа-канала объекта, кэшированного как растровое изображение. Тем не менее, для трансформаций альфа-канала с аппаратным ускорением значение alpha должно быть от 0 до 1.0. Это соответствует значению параметра colorTransform.alphaMultiplier от 0 до 256.

Не задавайте свойству cacheAsBitmap значение true в часто обновляемых объектах, таких как текстовые поля.

Экранные объекты с часто изменяющимся графическим содержимым, как правило, не подходят для визуализации с использованием графического процессора. Прежде всего это касается старших устройств с менее мощными графическими процессорами. Если для загрузки графики в графический процессор требуется слишком много ресурсов, лучше выбрать визуализацию с использованием ЦП.

Пересмотрите структуру экранных объектов, содержащих дочерние объекты, которые двигаются относительно родительских. Замените их таким образом, чтобы дочерние объекты стали родственными. Тогда у каждого из них будет собственное растровое представление. Кроме того, каждый экранный объект будет двигаться относительно других без загрузки новой графики в графический процессор.

Задавайте свойству cacheAsBitmap значение true на самом высоком уровне списка отображения, ниже которого дочерние экранные объекты не анимируются. Другими словами, его необходимо задать для контейнеров экранных объектов, которые не содержат подвижных частей. На задавайте его для дочерних экранных объектов. Не задавайте его для спрайтов, которые содержат другие анимируемые экранные объекты.

Когда для экранного объекта задано свойство z , в приложении всегда используется кэшированное растровое представление. Кроме того, если для экранного объекта задано свойство z , даже при его вращении или масштабировании используется растровое представление. Свойство cacheAsBitmapMatrix не используется, если для экранного объекта не задано свойство z . Такие же правила действуют при задании любых свойств трехмерного экранного объекта, включая свойства rotationX , rotationY , rotationZ и transform.matrix3D .

Не задавайте свойство scrollRect или mask контейнера экранного объекта с содержимым, для которого необходимо использовать аппаратное ускорение. При задании этих свойств отключается аппаратное ускорение контейнера экранного объекта и его дочерних объектов. Вместо использования свойства mask можно наложить маскировочный экранный объект над маскируемым.

Размеры экранных объектов, для которых используется аппаратное ускорение, подвержены определенным ограничениям. На более старых устройствах это не более 1024 пикселей в ширину и в высоту. На новых устройствах это не более 2048 пикселей. Для тестирования производительности на устройстве можно применять инструмент диагностики визуализации с использованием графического процессора.

Графический процессор также использует оперативную память iPhone для хранения растровых изображений. Он использует по меньшей мере столько памяти, сколько необходимо для растровых изображений.

Графический процессор использует выделения памяти, равные степени числа 2 для каждого размера растрового изображения. Например, графический процессор может резервировать память размером 512 x 1024 или 8 x 32. Поэтому для изображения размером 9 x 15 пикселей используется такой же объем памяти, что и для изображения размером 16 x 16 пикселей. У кэшированных экранных объектов стороны могут быть не более чем в 2 раза длиннее. Например, использование экранного объекта размером 32 x 16 пикселей является более эффективным, чем использование экранного объекта 33 x 17 пикселей.

Не полагайтесь на измененную по размеру рабочую область для уменьшения масштаба активов, которые были изменены по размеру для других платформ (таких как рабочий стол). Вместо этого используйте свойство cacheAsBitmapMatrix или измените размер активов перед публикацией для iPhone. 3D-объекты пропускают свойство cacheAsBitmapMatrix при кэшировании изображения поверхности. По этой причине лучше изменять размер экранных объектов перед публикацией, если они будут визуализироваться на 3D-поверхности.

Между преимуществами аппаратного ускорения и использованием оперативной памяти существует компромисс. При заполнении памяти ОС iPhone уведомляет другие запущенные собственные приложения iPhone об освобождении памяти. По мере того, как приложения обрабатывают это уведомление и работают над освобождением памяти, они могут вести конкурентную борьбу с вашим приложением за использование циклов ЦП. Это может мгновенно привести к снижению производительности приложения. Обязательно протестируйте приложение в более старых устройствах, поскольку в них может быть предусмотрен гораздо меньший объем памяти, доступной для запущенных процессов.

При отладке программы на iPhone можно применять функцию диагностики визуализации с использованием графического процессора. Эта функция позволяет проверить, как программа выполняет визуализацию с использованием графического процессора. Дополнительные сведения см. в подразделе «Отладка с помощью функции диагностики визуализации с использованием графического процессора» раздела « Отладка приложения iPhone ».

Дополнительные сведения о работе со свойством cacheAsBitmapMatrix см. в разделе «DisplayObject.cacheAsBitmapMatrix» статьи « Специальные API-интерфейсы ActionScript для мобильных устройств ».