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) 

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

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

 android:configChanges="orientation|screenSize" 

在Android清单文件中,但这是行不通的!

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

有没有人解决这个问题?

谢谢!

Solutions Collecting From Web of "java.lang.RuntimeException:eglSwapBuffers失败:EGL_SUCCESS"

没有解决scheme,只是评论

由于某些原因,我不能评论以前的post,但我有一些意见,也许可以帮助。

我们有同样的问题,并努力寻找解决scheme…我们大大减less了纹理的大小,现在没有大于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制作游戏的时候,我也遇到过这个问题,太多的尺寸大于1024×1024的地图集可能会破坏数据。

没有解决办法,只是观察。

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

我没有find匹配的来源。 这些设备运行补丁GLSurfaceView (堆栈跟踪search没有find任何东西…),或者他们使用中间版本(嗯,我不知道4.0.2是否是官方的,grepcode只包含4.0.1和4.0.3); 或者我错过了一些东西。

你必须追踪哪些确切的设备/ Android版本遇到这个问题。 然后,您可以尝试通过自己提供修补的GLSurfaceView或使用不同的EGLconfiguration来解决此问题,前提是可以根本解决问题。 有几个星期没有处理的bug 。 想知道负责的团队面临什么更大的问题?

我最终实现的解决scheme是添加一个全局exception处理程序来捕获这个错误(因为它被抛出了任何我已经控制的线程)。

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

所以至less应用程序不会崩溃,我可以提供一个消息来解释情况。