Не удается создать поверхность EGL при возвращении из режима ожидания / сна - PullRequest
2 голосов
/ 21 апреля 2011

Я пытаюсь заставить мой android 2.3 NativeActivity успешно возобновить работу после выхода из спящего режима. Это чисто нативная деятельность с использованием OpenGL.

Я использовал android: configChanges = "direction" в манифесте, чтобы избежать разрушения при входе в сон.

Когда я получаю APP_CMD_TERM_WINDOW, я выгружаю свои ресурсы GL и прекращаю работу GL.

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

eglCreateWindowSurface возвращает EGL_BAD_MATCH, и игра окончена ...

Есть мысли?

1 Ответ

5 голосов
/ 20 июля 2011

Я обнаружил, что большая часть примера исходного кода EGL с использованием NativeActivity (NVIDIA, Sony Ericsson), с использованием или без использования библиотеки native-app-glue, имеет эту проблему.

Проблема заключается в том, что вНа некоторых устройствах окно, которое вы получаете при получении APP_CMD_INIT_WINDOW после возврата из спящего режима, отличается от того, которое вы используете при инициализации.Большинство инициализаций EGL, которые я видел в примере вызова кода eglChooseConfig, с жестко закодированным массивом атрибутов (обычно тот, который подходит для флагманского устройства этого производителя).

Вы должны проверить формат окна с помощью ANativeWindow_getFormat и выбирать конфигурацию 565 EGL только тогда, когда NativeWindow имеет WINDOW_FORMAT_RGB_565, в других случаях используйте конфигурацию 888.

Вы можете использовать два массива атрибутов или, что еще лучше, вы можете получить все конфигурации из eglChooseConfig, использовать eglGetConfigAttrib, чтобы получить значения (глубина, трафарет и т. Д.) И искать тот, который имеет в точности значенияты хочешь.Возможно, он не имеет точно заданного вами размера глубины или размера трафарета, но у вас должна получиться конфигурация с большим трафаретом или буфером глубины.

...