我在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问题。
有没有人解决这个问题?
谢谢!
答案 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() {...})
因此,至少应用程序不会崩溃,我可以提供一条消息来解释这种情况。