java.lang.RuntimeException:eglSwapBuffers失败:EGL_SUCCESS

时间:2012-05-05 06:09:16

标签: android opengl-es

我在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问题。

有没有人解决这个问题?

谢谢!

4 个答案:

答案 0 :(得分:11)

没有解决方案,只需评论

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

我们遇到了同样的问题并且很难找到解决方案......我们大幅减少了纹理的大小,现在没有大于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)

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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

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

eglSwapBuffers returns false的电话。以下错误处理不能处理没有错误的情况 - 可能它没有被EGL设置; OR 返回值错误。

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

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

答案 3 :(得分:2)

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

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

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