Я разрабатываю игру в движке And, который генерирует исключение. На самом деле я не знаю, где происходят исключения. Об этом сообщается на рынке много раз.
java.lang.RuntimeException: eglSwapBuffers failed: EGL_BAD_ALLOC at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1080) at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1038) at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1364) at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
Есть ли какое-нибудь решение для этого?
Эта ошибка может возникнуть, если вы не уведомите GLSurfaceView о состоянии транзита состояния вашей деятельности. См. Следующий абзац отсюда: http://developer.android.com/reference/android/opengl/GLSurfaceView.html
Активность Жизненный цикл
GLSurfaceView должен быть уведомлен, когда действие приостановлено и возобновлено. Клиенты GLSurfaceView должны вызывать onPause (), когда действие приостанавливается и onResume (), когда активность возобновляется. Эти вызовы позволяют GLSurfaceView приостанавливать и возобновлять поток рендеринга, а также разрешать GLSurfaceView выпускать и воссоздавать отображение OpenGL.
Я не знаю, как это работает.
По моему опыту (что характерно для моей Samsung Note и ни одного другого устройства Android, которое я тестировал до сих пор), это то, что EGL_BAD_ALLOC
будет неправильно создан eglSwapBuffers()
вместо EGL_BAD_CURRENT_SURFACE
. Если ваш код обрабатывает повторное создание поверхности, это должно быть тривиально, чтобы справиться с этим неясным случаем.