Вопрос по android – java.lang.RuntimeException: eglSwapBuffers не удалось: EGL_SUCCESS

23

У меня есть приложение OpenGL в магазине Google Play, и я сталкиваюсь с ежедневным исключением:

<code>java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1085)
at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1043)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1369)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1123)
</code>

Проблема в том, что на всех моих смартфонах я не могу воспроизвести эту ошибку. Я уже связывался с Google для получения информации об устройстве, но у них ее нет (так они говорят). Информация о платформе в исключении установлена на «ДРУГОЕ».

В сети я обнаружил некоторые намеки на то, что эта ошибка может быть связана с устройством Samsung Galaxy Y, и я нашел несколько советов:

<code>android:configChanges="orientation|screenSize"
</code>

в файле манифеста Android, но это не работает!

И, конечно, я обработал onPause и onResume, реализованные для моей поверхности GL, которые, если нет, создают другие проблемы eglSwapBuffer.

У кого-нибудь есть решение этой проблемы?

Спасибо!

Я подтверждаю, что на Samsung Galaxy SIII возникла та же ошибка ılǝ
Вы нашли решение этой проблемы? user874649
Нет, я не нашел решения, я удалил это устройство Samsung Galaxy Y из списка поддерживаемых устройств. Andi Droid
Вы нашли какое-нибудь решение? Это действительно влияет на производительность. Crawler

Ваш Ответ

4   ответа
6

вашей памяти недостаточно для загрузки всех данных. Я тоже столкнулся с этой проблемой, когда делал свою игру с AndEngine, слишком много Atlas размером больше 1024x1024, данные могут быть повреждены.

Спасибо за подсказку. Andi Droid
Я имею текстуры до 2048x1024 пикселей, которые загружаю при запуске приложения. Пока я не знаю, какое устройство вызывает эти исключения, потому что проблема не возникла с Samsung Galaxy Y. Я успешно протестировал свое приложение на этом устройстве. Возможно, единственный способ избавиться от этого исключения - отфильтровать устройства нижнего уровня. Andi Droid
4

No solution, just observations.

Призыв кeglSwapBuffers returns false, Следующая обработка ошибок не справляется со случаем, что ошибки нет - потенциально она не была установлена EGL;OR возвращаемое значение неверно.

Я не нашел подходящих источников. Эти устройства либо работают исправленнымиGLSurfaceViews (поиск трассировки стека ничего не нашел ...) или они используют промежуточную версию (ну, я не знаю, был ли 4.0.2 официальным, grepcode содержит только 4.0.1 и 4.0.3);OR Я что-то пропустил.

Вы должны отследить, какие именно устройства / версии Android сталкиваются с этой проблемой. Тогда вы можете попытаться обойти эту проблему, предоставив исправленныеGLSurfaceView самостоятельно или с использованием другой конфигурации EGL - при условии, что проблема может быть решена вообще.Есть ошибки которые остаются необработанными в течение нескольких недель; интересно, с какими большими проблемами сталкивается ответственная команда ...

@ AndiDroid какой-нибудь прогресс?
Спасибо за ответы. Я также изучил источники Android и пришел к тем же выводам. Тем временем пользователь упомянул, что он использует это устройство Samsung Galaxy Y. Я уже заказал один, чтобы я мог это проверить. Но в любом случае, если решение этой проблемы состоит в том, чтобы написать свой собственный GLSurfaceView, я не доволен этим. Но все равно спасибо за ваши предложения. Andi Droid
Я боюсь, что нет. Мань упомянул, что у него была такая же проблема, но в его случае памяти было недостаточно. Я заказал и протестировал свое приложение на этом Samsung Galaxy Y, которое может вызвать проблему. Но на моем издании все работает. Единственным достижением может быть признание того, что вы не должны пытаться сделать приложение совместимым со всеми устройствами, даже с теми, которые явно не имеют смысла (экраны с низким разрешением и т. Д.). Потому что я думаю, что одно из тех бюджетных устройств вызывает эту проблему. Andi Droid
2

которое я в итоге реализовал, заключалось в том, чтобы добавить глобальный обработчик исключений, чтобы перехватить эту ошибку (поскольку она выбрасывается за пределы любого потока, над которым я имею контроль).

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {...})

Так что, по крайней мере, приложение не падает, и я могу выложить сообщение, объясняющее ситуацию.

11

No solution, just comment

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

У нас та же проблема, и мы изо всех сил пытаемся найти решение ... Мы резко уменьшили размер наших текстур, и теперь ни одна из них не превышает 1024x900 (не забывайте шрифты). Но нам все еще нужно несколько, и проблема все еще существует. Мы указываем проблемные устройства на следующие:

Samsung Galaxy Y (GT-S5360 GT-S5360B GT-S5360L GT-S5363 GT-S5368 GT-S5369 SCH-I509 SCH-i509)
Samsung Galaxy Y Duos (GT-S6102 GT-S6102B GT-S6102E ivory)
Samsung Galaxy Ace (GT-S5830 GT-S5830B GT-S5830C GT-S5830D GT-S5830G GT-S5830L GT-S5830M GT-S5830T GT-S5830i GT-S5838 GT-S5839i GT-S6358 SCH-I619 SHW-M240S)
Samsung Galaxy Ace Duos (GT-S6802 GT-S6352 GT-S6802B SCH-I579 SCH-I589 SCH-i579 SCH-i589)
Samsung Galaxy Mini (GT-S5570 GT-S5570B GT-S5570I GT-S5570L GT-S5578 SGH-T499 SGH-T499V SGH-T499Y)
Samsung Galaxy Pocket (GT-S5300 GT-S5300B GT-S5302 GT-S5302B)

Также ошибка сообщается в двух вариантах с разными номерами строк:

java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS
    at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1099)
    at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1057)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1389)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1138)

java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS
    at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1085)
    at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1043)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1369)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1123)

Я не знаю, полезен ли я здесь, но если это поможет ...

та же ошибка в Galaxy SIII, только в разных строках: java.lang.RuntimeException: ошибка eglSwapBuffers: EGL_BAD_ALLOC в android.opengl.GLSurfaceView $ EglHelper.throwEglException (GLSurfaceView.java:1178) в android.opengl.gg (Els.opengl.GLS) GLSurfaceView.java:1136) в android.opengl.GLSurfaceView $ GLThread.guardedRun (GLSurfaceView.java:1463) в android.opengl.GLSurfaceView $ GLThread.run (GLSurfaceView.java:1216)
Я обновил список устройств со всеми вариантами MODEL для каждого типа модели.
Та же проблема здесь, тот же набор устройств. Я фильтрую в консоли разработчика.
Я получил это от 16 устройств и 12 из них GT-S5830i (Samsung Galaxy Ace).

Похожие вопросы