java.lang.RuntimeException:eglSwapBuffers失败:EGL_SUCCESS

我在Google Play商店中有一个OpenGL应用程序,我面临每日例外:

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) 

问题是,在我的所有智能手机上,我都无法重现此错误。 我已经与谷歌联系了任何设备信息,但他们没有(所以他们说)。 例外中的平台信息设置为“OTHER”。

我在网上发现了一些提示,这个错误可能来自三星Galaxy Y设备,我发现了一些建议,包括:

 android:configChanges="orientation|screenSize" 

在Android清单文件中,但这不起作用!

当然,我已经为我的GL表面实现了onPause和onResume处理,如果没有,会产生其他eglSwapBuffer问题。

有没有人解决这个问题?

谢谢!

没有解决方案,只需评论

由于某些原因,我不能评论以前的post,但我有一些观察可能会有所帮助。

我们遇到了同样的问题并且很难find解决方案……我们大幅减少了纹理的大小,现在没有大于1024×900(不要忘记字体)。 但是我们仍然需要几个问题,问题仍然存在。 我们将有问题的设备指向以下设备:

 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) 

我不知道我在这里是否有用,但万一它有帮助……

您的内存可能不足以首先加载所有数据。 我在使用AndEngine进行游戏时遇到了这个问题,太多的Atlas尺寸大于1024×1024,数据可能会被打破。

没有解决方案,只是观察。

eglSwapBuffers的调用返回false 。 以下error handling不能处理没有错误的情况 – 可能它没有被EGL设置; 或者返回值是错误的。

我找不到匹配的来源。 这些设备要么运行修补的GLSurfaceView (堆栈跟踪搜索没有find任何东西……)或者他们使用中间版本(好吧,我不知道4.0.2是否正式,grepcode只包含4.0.1和4.0.3); 或者我错过了什么。

您必须跟踪哪些确切的设备/ Android版本遇到此问题。 然后,您可以尝试通过自己提供修补的GLSurfaceView或使用不同的EGL配置来解决此问题 – 前提是问题可以解决。 有几个星期未处理的错误 ; 想知道责任团队面临的更大问题……

我最终实现的解决方案是添加一个全局exception处理程序来捕获此错误(因为它被抛出我控制的任何线程之外)。

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

所以至少应用程序不会崩溃,我可以提出一条消息来解释这种情况。