Android ICS: что на самом деле делает опция "принудительный рендеринг GPU"?

Я считаю, что когда я включаю эту опцию разработчика, мой проект OpenGL перестает работать. Немного тревожно, если не сказать больше.

Logcat показывает миллион из них:

 E/libEGL  ( 1022): called unimplemented OpenGL ES API
 E/libEGL  ( 1022): called unimplemented OpenGL ES API
 E/libEGL  ( 1022): called unimplemented OpenGL ES API
 ...

первая сцена делает совершенно хорошо, но после этого первый swapbuffers(), все Susbequent GL ES APIs (даже glSetMatrixMode()) ничего не делать, кроме журнала "unimplemented API".

Это все работает отлично (т. е. реализовано), если у меня есть опция "принудительный рендеринг GPU" выкл.

Итак, что же на самом деле делает эта опция?

4 ответов


эта опция предназначена для разработчиков, чтобы они могли легко тестировать свои приложения с включенным ускорением H/W. Как я понимаю, 2D-приложение, которое использует Canvas Apis, может извлечь выгоду из этой опции, так как включение этого действительно заставит систему создать собственный GLES2.0 контекст в другом потоке и класс Canvas используют ускоренный бэкэнд GLES h/w вместо Skia. Это родной GLES2.0 создание контекста происходит в собственном коде C, и разработчик приложения не имеет контроль над этим.

возвращаясь к вашей проблеме, "вызванное нереализованное сообщение об ошибке" в основном говорит, что либо (1) вы действительно используете неправильный контекст GL (например, создание GLES1.1 звонки с GLES2.0 context или viceversa) или (2) ваше устройство не смогло загрузить драйверы GLES и, таким образом, система не смогла найти фактический указатель функции GL. Система знает, что загружать, читая egl.cfg файл найден под /system/lib/ egl / и сам драйвер GL найден в разделе / system / vendor / lib/.

Я бы проследил за Google, так как это может быть просто ошибка.


Это заставляет аппаратное ускорение во всех приложениях. Подробнее об этом можно прочитать здесь:http://developer.android.com/guide/topics/graphics/hardware-accel.html

Не забудьте проверить неподдерживаемые операции, которые, вероятно, где вы столкнулись с проблемами.


режим ускорения в ICS не более особенный, чем в Honeycomd. По умолчанию режим ускорения включен для всех приложений, ориентированных на api 14 или выше. Но в то же время существуют приложения, которые ориентированы на другие версии SDK. Таким образом, вы можете включить аппаратное ускорение в этих приложениях, установив "ускорить работу GPU". Есть великий объяснение и в должности от Дианы, которая объясняет это.


Как было сказано здесь, эта опция заставляет графическое аппаратное ускорение, и это, предположительно, по умолчанию на уровне API 14 или 15, я имею в виду ICS.

Я не рекомендую тестировать это на эмуляторе, потому что это сделает ваш компьютер и Eclipse вялым и/или сбой. Я пробовал этот параметр на эмуляторах с широким спектром конфигураций ресурсов (разные размеры для отображения, кэшей, процессора и ОЗУ) с уровнем API 14 и 15 и всегда сбои.

было бы лучше протестировать ваше приложение на двухъядерном устройстве, таком как недавний планшет Samsung Galaxy 10.1, 8.9 или планшет Motorola Xoom, у которого есть фактическое оборудование, такое как графический процессор nVidia Tegra для поддержки ускорения с Honeycomb, что делает его лучше для приложений OpenGL ES... И поскольку на рынке нет планшетов с ICS, вы не сможете соответствовать упомянутой конфигурации API уровня 14 и ICS.

Я бы закончил, согласившись с тем, что есть ошибка Google еще не устранена/решена на SDK.