OpenGL ES* в Android* на платформе Intel® Atom™

 

1. Введение


Стандартным API для трехмерной графики в Android является OpenGL ES - наиболее широко используемый в настоящее время API для ускорения трехмерной графики на всех мобильных устройствах. В ранних версиях Android ускорение OpenGL ES было необязательным, но по мере развития Android и увеличения размера экрана API OpenGL ES стал важным компонентом графической подсистемы Android.

Существуют три версии OpenGL ES: 1.0 и 1.1, которые поддерживались в ОС Android с самого начала, и версия 2.0, поддержка которой была добавлена в Android 2.2. В настоящее время разработчики Android могут выбрать для использования любую версию. В Таблице 1 перечислены все основные версии Android на сегодняшний день и указано, для каких выпусков существуют системные образы для процессоров Intel® Atom™.

Версия ОС Название API Поддержка OpenGL Поддержка Intel® Atom™
Android 1.5 Cupcake 3 OpenGL ES 1.0  
Android 1.5 Cupcake 3 OpenGL ES 1.0  
Android 1.6 Donut 4 OpenGL ES 1.0, 1.1  
Android 2.0 Eclair 5 OpenGL ES 1.0, 1.1  
Android 2.1 Eclair 7 OpenGL ES 1.0, 1.1  
Android 2.2 Froyo 8 OpenGL ES 1.0, 1.1, 2.0  
Android 2.3.3 Gingerbread 10 OpenGL ES 1.0, 1.1, 2.0 Да
Android 3.0 Honeycomb 11 OpenGL ES 1.0, 1.1, 2.0  
Android 3.1 Honeycomb 12 OpenGL ES 1.0, 1.1, 2.0  
Android 3.2 Honeycomb 13 OpenGL ES 1.0, 1.1, 2.0  
Android 4.0 Ice Cream Sandwich 14 OpenGL ES 1.0, 1.1, 2.0  
Android 4.0.3 Ice Cream Sandwich 15 OpenGL ES 1.0, 1.1, 2.0 Дв
Android 4.1 Jelly Bean 16 OpenGL ES 1.0, 1.1, 2.0 Да

Таблица 1: Сводка версий Android* с OpenGL ES* и поддержкой процессоров Intel® Atom™.

Android поддерживается на платформе Intel Atom начиная с версии Android 2.3.3, поддерживающей OpenGL ES 1.0, 1.1 и 2.0. Поддержка OpenGL ES на процессорах Intel Atom реализована в полном объеме. По производительности такое решение опережает большинство прочих решений Android благодаря уникальному сочетанию возможностей:

  • Графические процессоры PowerVR SGX540 и SGX544MP2 GPUs (400 МГц и выше)
  • Быстрые вычисления с плавающей запятой
  • Системные образы x86 для эмуляции виртуальных устройств Android
  • Intel® Hardware Accelerated Execution Manager (Intel HAXM)
  • Intel® Graphics Performance Analyzers (Intel GPA)

Корпорация Intel сотрудничает с Google для поддержки платформы Android, выпусков новых версий системных образов x86, Intel HAXM и Intel GPA для дальнейших версий Android

2. Системные образы x86 для эмуляции виртуальных устройств Android


Все разработчики встроенных систем знают, что эмулятор виртуальных устройств может ускорить разработку новых приложений. Но использование виртуальных устройств Android (AVD) для системных образов ARM затруднено из-за чрезвычайно низкой скорости: виртуальному устройству приходится эмулировать каждую инструкцию ARM в системе разработки под управлением Windows* или Linux*. Одна лишь загрузка Android на типовом виртуальном устройстве с архитектурой ARM может занять 5 минут или дольше. Корпорация Intel решила эту проблему, выпустив средство Intel Hardware Accelerated Execution Manager (Intel HAXM). При установке этого средства и использовании его с виртуальным устройством с архитектурой Intel x86 Atom разработка приложений существенно ускоряется, причем на начальном этапе можно обойтись вовсе без физического устройства с Intel Atom.

Обратите внимание, что эмуляция AVD корпорации Google в настоящее время поддерживает только OpenGL ES 1.0 и 1.1, но не 2.0.

3. Intel® Graphics Performance Analyzers


Еще одно важное средство для разработчиков приложений с OpenGL ES для Android на платформе Intel Atom — это Intel Graphics Performance Analyzers (Intel GPA). Этот набор инструментов предоставляет в реальном времени десятки важных системных показателей, относящихся к CPU, GPU и OpenGL ES. Intel GPA запускается на компьютере разработки под управлением Windows или Ubuntu Linux и взаимодействует с компонентами драйвера на устройстве Android через интерфейс отладки Android (adb). Разработчики могут проводить анализ, быстро обнаруживать критические секции в графическом конвейере, находить лучшие возможности оптимизации кода.

Получить дополнительные сведения и загрузить последнюю версию Intel GPA (2012 R4) для разработки Android можно по адресу: http://software.intel.com/en-us/vcsource/tools/intel-gpa?cid=sem121p7972

4. Драйверы OpenGL ES


Драйверы OpenGL ES уже встроены в системные образы x86 в составе наборов Android SDK, поддерживающих процессоры Intel Atom. Разработчики Intel и Google потрудились над тем, чтобы разрабатывать приложения для Android было одинаково просто и для устройств с архитектурой x86, и для устройств с архитектурой ARM, даже если приложение широко использует OpenGL ES.

В версиях Android 2.3.3 (Gingerbread), 4.0.3 (Ice Cream Sandwich) и 4.1 (Jelly Bean) реализована полная поддержка процессоров Intel Atom, в том числе и драйверы для OpenGL ES 1.1 и 2.0. Достаточно лишь выбрать одну из этих версий в Android SDK Manager. Необходимо выбрать для включения «Intel x86 Atom System Image». Кроме того, нужно загрузить и установить решение Intel Hardware Accelerated Execution Manager (Intel HAXM), которое находится в SDK Manager в разделе «Extras». Если Android SDK Manager еще не установлен, его можно загрузить по адресу: http://developer.android.com/sdk/index.html

Также можно загрузить системные образы Intel x86 непосредственно с сайта Intel: http://software.intel.com/en-us/articles/android-ice-cream-sandwich-x86-emulator-image

5. Графические процессоры PowerVR*


Процессоры Intel Atom оснащаются графическими ускорителями PowerVR — это наиболее широко используемые в настоящее время ускорители OpenGL ES на мобильных устройствах. PowerVR — это проверенное, надежное решение на основе архитектуры универсальных масштабируемых блоков затенения (USSE). Но разные модели PowerVR обладают разными возможностями. В графических процессорах серии SGX540 количество блоков USSE вдвое больше по сравнению с SGX530, а в процессорах серии SGX544MP2 — вчетверо больше, что означало бы, соответственно, удвоенную и учетверенную производительность при неизменной тактовой частоте. Но процессоры Intel Atom отличаются от других решений и более высокой тактовой частотой, благодаря чему повышается производительность OpenGL ES. В таблице 2 указаны семейства ядер PowerVR, которыми оснащаются системы с процессорами Intel Atom.

Серия Intel® Atom™ GPU Частота GPU
Intel® Atom™ Z24XX PowerVR SGX 540 400 MHz
Intel® Atom™ Z2580 PowerVR SGX 544MP2 Пока нет данных

Таблица 2: Ускорители OpenGL ES* в процессорах Intel® Atom™ для Android*

Архитектура USSE в PowerVR способна поддерживать объединенные требования к модели затенения, действующие в OpenGL 2.1 и DirectX* 10.1, но для разработчиков Android доступны только возможности, реализованные в OpenGL ES 1.1, OpenGL ES 2.0 и их расширениях.

6. Расширения OpenGL ES


Набор компонентов OpenGL ES должен быть в целом одинаковым для всех платформ согласно стандартам Khronos, определяющим версии OpenGL ES 1.1 и 2.0. В этом и заключается цель стандартного API. Но разработчикам разрешается задействовать определенные возможности конкретных GPU с помощью расширений OpenGL ES. Официальный реестр расширений OpenGL ES поддерживается компанией Khronos. Все расширения приведены по адресу: http://www.khronos.org/registry/gles

Наиболее важные расширения OpenGL ES, такие как поддержка сжатия текстур и прямой потоковой передачи текстур, доступны для большинства платформ Android, но в настоящее время существуют различные форматы сжатия текстур для OpenGL ES. Ядро PowerVR в процессорах Intel Atom поддерживает наиболее широкий выбор форматов сжатия текстур.

Сжатие текстур — важная методика, при помощи которых можно повысить производительность приложений для трехмерной графики и снизить объем потребляемой памяти, но различные используемые форматы определяются только расширениями и различаются для каждой платформы. Наиболее широко поддерживается формат Ericsson Texture Compression (ETC1_RGB8), но он поддерживает только точность 8 бит на пиксель для передачи цвета и не поддерживает управление прозрачностью (альфа-канал). В дополнение к формату ETC1_RGB8 ядро PowerVR GPU также поддерживает форматы PVRTC, обладающие важными преимуществами перед ETC1_RGB8. Форматы PVRTC поддерживают сжатие текстур с точностью 2 или 4 бита на пиксель с возможностью включения данных альфа-канала на каждый пиксель. Эти возможности позволяют значительно снизить размер текстур (по сравнению с форматом ETC1_RGB8) и повысить гибкость при создании эффектов альфа-смешения.

Ядра PowerVR и сжатие PVRTC также применяются в устройствах Apple iPhone*, iPod* Touch и iPad* всех поколений, что обеспечивает определенную совместимость с Android на платформе Intel Atom за рамками стандарта OpenGL ES. Это важно при разработке приложений, предназначенных одновременно для платформ Android и iOS. Дополнительные сведения см. в разделе «Texture compression support» по адресу:

http://developer.android.com/guide/topics/graphics/opengl.html

Другие важные расширения OpenGL ES поддерживают быструю потоковую передачу изображений текстур между OpenGL ES и другими компонентами системы Android, например, видеокадрами из OpenMAX*. Драйверы процессоров Intel Atom для OpenGL ES также поддерживают эти важные расширения.

Приложения Android не должны быть рассчитаны на безусловное наличие какого-либо определенного расширения OpenGL ES на каком-либо определенном устройстве. Правильно написанные приложения должны запрашивать список доступных расширений во время выполнения. Списки расширений можно получить в драйверах OpenGL ES и EGL с помощью следующих вызовов:

glGetString(GL_EXTENSIONS);

eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS);

На сайте Google Play есть полезное приложение, которое может выполнить этот запрос и отобразить возвращенный список для любого устройства, на котором оно было запущено: https://play.google.com/store/apps/details?id=com.realtechvr.glview

Расширения OpenGL ES, доступные для Android, значительно различаются в зависимости от ядер GPU, но не в силу различий в архитектуре CPU. Процессоры Intel Atom поддерживают в целом такие же расширения OpenGL ES, как и любая другая платформа Android с GPU PowerVR, несмотря на то, что процессоры Intel Atom построены на архитектуре x86. Ядро PowerVR в процессорах Intel Atom поддерживает больше редких расширений OpenGL ES, чем большинство других GPU, и некоторые эти расширения очень полезны. Впрочем, применение таких расширений ограничит возможность переноса вашего приложения на другие устройства Android с GPU, отличными от PowerVR. Расширения, имя которых оканчивается на «IMG», обычно поддерживаются только ядрами PowerVR, но и из этого правила есть исключения. Рекомендуется самостоятельно протестировать устройства Android, чтобы узнать, поддерживаются ли нужные расширения. Для этого можно использовать, например, средство GLView.

Ниже приведены некоторые примеры расширений OpenGL ES, доступных только для PowerVR

  • glFramebufferTexture2DMultisampleIMG()
  • glRenderbufferStorageMultisampleIMG()
  • glMultiDrawArraysEXT()
  • glMultiDrawElementsEXT()[/css]

7. Производительность вычислений с плавающей запятой


Для высокой производительности приложений OpenGL ES важно, чтобы ядра GPU и CPU могли быстро обрабатывать вычисления с плавающей запятой. Программы блоков затенения широко используют вычисления с плавающей запятой, которые выполняются на GPU, но код приложений OpenGL ES обычно также требует значительного объема расчетов с плавающей запятой, и эти расчеты должны быть выполнены центральным процессором в ходе подготовки вызовов к OpenGL ES. Это еще одна область, где процессоры Intel Atom обладают явным преимуществом над решениями на базе ARM, поскольку в архитектуре Intel Atom ядра GPU и CPU обладают быстрыми блоками вычислений с плавающей запятой.

Системы, не поддерживающие аппаратную обработку операций с плавающей запятой, используют вместо их операции с фиксированной запятой с отдельным драйвером для OpenGL ES 1.1 под названием «Common-Lite». Но системные образы, предоставляемые корпорацией Intel для Android, включают только драйвер «Common» (с плавающей запятой) для OpenGL ES 1.1, поскольку все процессоры Intel Atom обладают аппаратными блоками вычислений с плавающей запятой, встроенными в ядра CPU и GPU, поэтому использовать вычисления с фиксированной запятой нет необходимости. Стандарт Khronos для OpenGL ES 2.0 предписывает использовать только операции с плавающей запятой.

8. Android Framework SDK


Android SDK — это самый простой способ использования OpenGL ES в приложении Android с помощью класса GLSurfaceView. Этот класс обрабатывает инициализацию EGL, потоки и выделение поверхностей, которые может отображать OpenGL ES. OpenGL ES также поддерживает отображение объектов TextureView, обладающих некоторыми дополнительными возможностями, такими как преобразования и альфа-смешивание, но в этом случае для настройки и использования требуется больше кода. Android SDK поддерживает OpenGL ES посредством привязок Java* в следующих пакетах корпораций Google и Khronos:

  • jvax.microedition.khronos.egl: стандартная реализация Khronos
  • javax.microedition.khronos.opengles: стандартная реализация Khronos
  • android.opengl: обновлено для повышения производительности

В настоящее время на платформе Android можно использовать три версии API OpenGL ES: 1.0, 1.1 и 2.0. Версия OpenGL ES 1.0 была заменена версией 1.1. Версия OpenGL ES 2.0 обеспечивает более высокую гибкость за счет программирования затенения, но несовместима с прежним кодом, написанным для OpenGL ES 1.1. В таблице 3 приведены все версии API OpenGL ES, которые можно использовать при разработке приложений, и классы, определяющие их для Android.

OpenGL ES API Version Classes
OpenGL ES 1.0 android.opengl.GLES10
OpenGL ES 1.0 android.opengl.GLES10Ext
OpenGL ES 1.1 android.opengl.GLES11
OpenGL ES 1.0 android.opengl.GLES11Ext
OpenGL ES 2.0 android.opengl.GLES20

Таблица 3: Классы поддержки OpenGL ES в Android

Платформа Intel Atom для Android обеспечивает полную поддержку приложений, использующих любую из этих версий OpenGL ES посредством SDK или NDK.

 

9. Пакет Android NDK


Пакет NDK был разработан корпорацией Google, чтобы дать возможность разработчикам повысить производительность приложений для Android за счет отказа от виртуальной машины Dalvik и выполнения кода C/C++напрямую. Корпорация Google решила предоставить NDK всем разработчикам, поскольку этот пакет упрощает перенос существующих приложений, написанных на C/C++ и обеспечивает наивысшую производительность ресурсоемких приложений, таких как трехмерные игры.

 

Android NDK поддерживает OpenGL ES 1.1 и 2.0; для обеих версий предоставляются образцы приложений. Большинство приложений OpenGL ES написаны на C/C++, поэтому NDK предоставляет механизм сочетания кода C/C++ с платформой Android, разработанной на основе Java. Этот механизм называется Java Native Interface (JNI). Он все чаще применяется для создания приложений Android, требующих интенсивной обработки графики. NDK поддерживает JNI для процессоров Intel Atom начиная с версии r6b, которую можно загрузить по адресу: http://developer.android.com/sdk/ndk/index.html

10. Renderscript


Решение Renderscript впервые появилось в Android 3.0. Эта технология создана корпорацией Google для помощи в разработке алгоритмов ресурсоемких вычислений, в том числе графических, в обход ВМ Dalvik. Но в отличие от NDK код Renderscript компилируется во время выполнения на устройстве Android. Решение Renderscript может поддерживать многопроцессорные системы, но в настоящий момент оно использует только вычислительные ядра CPU, но не GPU. Возможно, в будущих выпусках Renderscript будет реализована поддержка ядер GPU, а существующий код Renderscript сможет задействовать новые возможности (желательно без переделки).

Renderscript обеспечивает абстракцию оборудования, поэтому разработчикам приложений не нужно заботиться об архитектуре GPU и о количестве фактически доступных вычислительных ядер. Но Renderscript не использует для этого существующие стандарты параллельных вычислений, такие как GLSL или OpenCL*. Применяется новый язык на основе C99 со встроенной поддержкой OpenGL ES. Абстракция Renderscript гарантирует выполнение кода на любых устройствах Android, в том числе и с процессорами Intel Atom. Дополнительные сведения о Renderscript см. в разделе: http://android-developers.blogspot.com/2011/02/introducing-renderscript.html

11. Заключение


Архитектура x86 процессоров Intel Atom не затрудняет разработку приложений OpenGL ES для Android, поскольку эти процессоры обладают всеми возможностями решений на базе процессоров ARM. Для обеспечения совместимости между платформами Android намного важнее архитектура GPU, а графическое ядро PowerVR процессоров Intel Atom является в настоящее время наиболее широко используемым графическим ядром мобильных устройств. Сочетание лучших в своем классе графических ядер PowerVR с быстрыми вычислениями с плавающей запятой, быстрой эмуляцией AVD и мощным графическим конвейером образует лучшее по совокупности показателей решение для приложений OpenGL ES на платформе Android.

OpenGL ES, OpenMAX и OpenVG являются товарными знаками Khronos Group.

OpenCL и эмблема OpenCL являются товарными знаками Apple Inc и используются с разрешения Khronos.

DirectX является товарным знаком корпорации Майкрософт (Microsoft Corporation).