Android NDK r3: Вградена поддръжка за OpenGL ES 2.0 и скок в графичната производителност

  • NDK r3 позволява комбиниране на Java код с нативен C/C++, интегрирайки високопроизводителни библиотеки в APK.
  • Директният достъп до OpenGL ES 2.0 от NDK позволява използването на програмируеми шейдъри и усъвършенствани графични ефекти.
  • Обновеният набор от инструменти генерира по-ефективен машинен код, подобрявайки производителността и плавността на игрите и 3D приложенията.
  • За потребителите това се изразява в по-зрелищни игри, с по-добра графика, по-стабилен FPS и по-добре управлявана консумация на енергия.

NDK r3 Android поддържа OpenGL ES 2.0

Google пусна своя Android NDK r3 , преработена версия на Android Native Development Kit , предназначена да позволи на разработчиците да комбинират Java SDK с нативен C/C++ код . Тази версия на NDK носи значителни подобрения за разработване на графично взискателни игри и приложения, тъй като осигурява директен достъп до OpenGL ES 2.0 от нативен код. Можете да видите и изтеглите официалната версия от страницата за разработчици на Android: developer.android.com/sdk/ndk . В допълнение, r3 включва корекции на грешки и подобрения в инструментите за разработка, които рационализират работния процес.

Знаем, че приложенията за Android обикновено се разработват на Java, използвайки API-тата на рамката и работещи на виртуалната машина Dalvik (или нейната еволюция, ART). Този модел предлага преносимост, но въвежда междинен слой, който може да ограничи максималната производителност , когато са необходими много изчисления, например в 3D двигатели, физика в реално време или напреднали браузъри.

За да използва по-добре ресурсите на устройството, Google предлага Android NDK , който ви позволява да пишете части от приложението на C/C++ и да компилирате native библиотеки (.so). Тези библиотеки са пакетирани в самия APK файл и се извикват от Java чрез JNI . По този начин разработчикът може да запази цялостната логика на Java и да делегира на native код модулите, където е необходима максимална производителност, намалявайки натоварването на виртуалната машина и възползвайки се от специфични оптимизации на инструментариума.

Какво предлага NDK r3 и защо е толкова важен за игрите?

Подобрения в Android NDK r3 OpenGL ES 2.0

С третата редакция на NDK, Google прави ясна стъпка за стимулиране на разработването на игри за Android. Досега много търговски 3D енджини разчитаха на OpenGL ES 1.x , приблизително еквивалентен на OpenGL 1.3, достатъчен за основна графика, но ограничен за съвременни ефекти . С OpenGL ES 2.0 , Android възприема програмируем модел, много близък до този на настолния OpenGL 2.0, който позволява работа с вертексни шейдъри и фрагментни шейдъри, написани на GLSL.

Това означава, че от нативния код на NDK, приложенията, насочени към подходящото API ниво, могат да контролират графичния конвейер, използвайки програмируемо засенчване, вместо да разчитат единствено на фиксирания конвейер. Практическият резултат е възможността за внедряване на разширено осветление , меки сенки , отражения , последваща обработка и дълъг списък от визуални ефекти , които преди това бяха много трудни или невъзможни на мобилни устройства.

Освен това, NDK r3 се предлага с актуализиран набор от инструменти , базиран на по-модерна версия на GCC в сравнение с първоначалните ревизии, способен да генерира по-компактен и ефикасен машинен код . Това се превръща в оригинални изпълними файлове с по-добра производителност и допълнителна оптимизация за игри, които вече натоварват графичния процесор до краен предел с OpenGL ES 2.0.

Друг практичен детайл е, че тази редакция опростява името до „r3 “, без да го обвързва с конкретна версия на платформата Android. В предишни версии някои разработчици смятаха, че NDK работи само за определена версия на системата, което не беше вярно. Новата конвенция за именуване подсилва идеята, че NDK е проектиран за множество нива на API , при условие че устройството поддържа функциите, които разработчикът декларира и проверява по време на изпълнение.

Връзка между Android, NDK и OpenGL ES 2.0

Поддръжка на OpenGL ES 2.0 с Android NDK r3

Android поддържа високопроизводителна 2D и 3D графика, използвайки OpenGL ES , вградената версия на добре познатата Open Graphics Library . OpenGL ES предоставя стандартен интерфейс между софтуера и графичния процесор (GPU), позволявайки на потребителите да се възползват максимално от графичните възможности на своя телефон или таблет.

Платформата за Android Java предлага класове като GLSurfaceView и GLSurfaceView.Renderer за интегриране на OpenGL ES сцени в дейности. Тези класове улесняват създаването на повърхност за рисуване и управлението на цикъла на рендериране с обратни извиквания като onSurfaceCreated, onDrawFrame и onSurfaceChanged. Когато това се комбинира с NDK , разработчикът получава двойна полза: контрол върху сцената от Java и изпълнение на критични изчисления в C/C++ , намалявайки натоварването на виртуалната машина.

Поддръжка на най-новите версии на Android OpenGL ES 2.0 и по-нова версия за широка гама от устройства, но всеки производител решава коя графична версия да внедри. Ето защо е важно да се декларира в AndroidManifest.xml на Изисквания за OpenGL ES използвайки етикета uses-feature със смелостта glEsVersion подходящо. Ако дадено приложение изисква OpenGL ES 2.0, за да функционира, тази декларация позволява на Google Play да го филтрира и да го показва само на устройства, способни да работят с тази версия.

Освен това, рамката и NDK позволяват на разработчиците да извършват проверка по време на изпълнение , за да определят коя версия на OpenGL ES всъщност поддържа графичният процесор. Това прави възможно написването на енджин, който използва OpenGL ES 2.0 като основа и, когато открие поддръжка за по-високи версии, активира допълнителни подобрения, без да губи съвместимост с широк набор от устройства.

NDK r3 се вписва в тази схема, като осигурява липсващото парче: директен достъп до OpenGL ES 2.0 от нативния код , което намалява натоварването на виртуалната машина в най-тежките части на рендирането и улеснява пренасянето на съществуващи 3D енджини от настолни компютри или други платформи към екосистемата на Android.

Въздействие на NDK r3 и OpenGL ES 2.0 върху крайните потребители

Комбинацията от NDK r3 , нативен C/C++ код и OpenGL ES 2.0 не само подобрява живота на разработчиците, но и има много ясни последици за обикновените потребители на телефони. Като начало, тя позволява игри с много по-модерна графика , включваща осветление, ефекти на частици и последваща обработка, които се доближават до това, което се вижда на конзоли или компютри, но са оптимизирани за мобилния формат.

Чрез изпълнението на критични части от играта в оптимизиран нативен код , времето за обработка на кадър се намалява, което спомага за поддържането на високи и стабилни FPS . Добрата кадрова честота не само прави играта по-плавна, но и намалява латентността в управлението , което е от решаващо значение в състезателните заглавия.

От друга страна, по-доброто използване на графичния процесор чрез OpenGL ES 2.0 и по-модерната верига от инструменти позволяват по-ефективно управление на захранването . Въпреки че взискателните игри остават ресурсоемки приложения, добре оптимизираният енджин може да постигне по-високо визуално качество с подобна или дори по-ниска консумация на енергия в сравнение с предишни технологии.

Това също така улеснява пренасянето на съществуващи двигатели и игри , които използват OpenGL 2.0, на други платформи. Благодарение на приликите между OpenGL ES 2.0 и настолния OpenGL 2.0, както и на възможността за използване на C/C++ с NDK, много разработчици могат да адаптират своите двигатели с по-малко усилия, което води до по-висококачествени заглавия, достъпни за Android.

Накратко, този NDK r3, с вградената си поддръжка за OpenGL ES 2.0 , подобрения си набор от инструменти и включените корекции на грешки, бележи значителна промяна в зрелостта на разработката за Android и отваря вратата към поколение 3D игри и приложения , които са по-богати на детайли, по-бързи и по-добре адаптирани към реалните възможности на всеки графичен процесор.


Добавяне като предпочитан източник в Google