Android ICS: что на самом деле делает опция «Force GPU Rendering»? - PullRequest
6 голосов
/ 21 декабря 2011

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

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

 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() все часто встречающиеся API-интерфейсы GL ES (даже glSetMatrixMode()) ничего не делают, кроме как записывают «не реализованный API».

Это все работает отлично (т.е. реализовано), если у меня опция «Force GPU Rendering» отключена off .

Итак, что на самом деле делает этот параметр?

Ответы [ 4 ]

3 голосов
/ 29 декабря 2011

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

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

.

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

2 голосов
/ 21 декабря 2011

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

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

0 голосов
/ 27 декабря 2011

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

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

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

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

0 голосов
/ 26 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...