java.lang.RuntimeException:eglSwapBuffers失败:EGL_SUCCESS

And*_*oid 23 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)
Run Code Online (Sandbox Code Playgroud)

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

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

android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)

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

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

有没有人解决这个问题?

谢谢!

Flo*_*ian 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)
Run Code Online (Sandbox Code Playgroud)

此错误也以两种不同的行号报告:

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)
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

  • 我的纹理高达2048x1024像素,我在应用程序启动时加载.到目前为止,我不知道哪个设备导致这些异常,因为三星Galaxy Y不是问题,我在此设备上成功测试了我的应用程序.也许摆脱这种异常的唯一方法是过滤掉低端设备. (2认同)

Ste*_*nke 4

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

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

我没有找到匹配的来源。这些设备要么运行修补过的GLSurfaceView(堆栈跟踪搜索没有找到任何内容...),要么使用中间版本(好吧,我不知道 4.0.2 是否是官方的,grepcode 仅包含 4.0.1 和 4.0 .3); 或者我错过了一些东西。

您必须追踪哪些确切的设备/Android 版本遇到了这个问题。然后,您可以尝试通过GLSurfaceView自己提供修补程序或使用不同的 EGL 配置来解决此问题 - 前提是问题可以完全解决。有些错误数周没有得到处理;想知道负责团队面临哪些更大的问题......