Игра My Android (OpenGL ES 2.0) должна быть приостановлена, когда пользователь минимизирует ее, не разрушая то, что уже нарисовано на экране. Первоначально он использовал NativeActivity и чистый C++, но похоже, что это невозможно. Я переписал его, и теперь Java генерирует настраиваемый GLSurfaceView, а игровая логика + рендеринг - на C++. Я добавил setPreserveEGLContextOnPause (true), когда поверхность создана.Предотвращение уничтожения EGLContext при переходе на задний план
Так изъян после кнопки пользователь нажмет Home является:
- OnPause посылает nativeOnPause в код C++ через JNI кодовые наборы
- C++ пауза переменную, которая предотвращает обновление и оказание
Это работает нормально. После того, как мы вернемся в приложение:
- onResume звонки nativeOnResume
- nativeOnResume вызывает методу EGL, чтобы получить текущий контекст, дисплей и поверхность и передать менеджеру игр.
- Обновление и визуализация активирован
- Мы получаем несколько EGL_BAD_SURFACE сообщения и, наконец, аварии на eglMakeCurrent
Возникает вопрос: должны ли мы каким-либо образом воссоздать EGLSurface и EGLDisplay с использованием текущего контекста, или получить текущую поверхность и дисплей в порядке?
Я также заметил, что, когда мы вернемся в приложение, onResume называется, но onSurfaceChanged или onSurfaceCreated не называется.
Любое предложение, как подойти к этой проблеме на> 4.0 устройствах?