简体   繁体   English

java.lang.RuntimeException:eglSwapBuffers失败:EGL_SUCCESS

[英]java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS

I've an OpenGL application in the Google Play Store and I'm facing a daily exception: 我在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)

The problem is, on all my smartphones I cannot reproduce this error. 问题是,在我的所有智能手机上,我都无法重现此错误。 I've already contacted Google for any device info, but they have none (so they say). 我已经与谷歌联系了任何设备信息,但他们没有(所以他们说)。 The platform info in the exception is set to "OTHER". 例外中的平台信息设置为“OTHER”。

I found some hints on the net that this error could be from a Samsung Galaxy Y device, and I found some suggestions to include: 我在网上发现了一些提示,这个错误可能来自三星Galaxy Y设备,我发现了一些建议,包括:

android:configChanges="orientation|screenSize"

in the Android manifest file, but this does not work! 在Android清单文件中,但这不起作用!

And of course I've the onPause and onResume handling implemented for my GL surface which, if not, produces other eglSwapBuffer problems. 当然,我已经为我的GL表面实现了onPause和onResume处理,如果没有,会产生其他eglSwapBuffer问题。

Has anybody a solution for this problem? 有没有人解决这个问题?

Thanks! 谢谢!

No solution, just comment 没有解决方案,只需评论

For some reasons I can't comment the previous posts but I've some observations which perhaps could help. 由于某些原因,我不能评论以前的帖子,但我有一些观察可能会有所帮助。

We have the same problem and struggling to find a solution... We drastically reduced the size of our textures and now none is bigger than 1024x900 (don't forget the font ones). 我们遇到了同样的问题并且很难找到解决方案......我们大幅减少了纹理的大小,现在没有大于1024x900(不要忘记字体)。 But we still need several ones and the problem is still there. 但是我们仍然需要几个,问题仍然存在。 We've pinpoint the problematic devices to the following ones: 我们将有问题的设备指向以下设备:

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)

Also the error is reported in two flavors with different line numbers: 此错误也以两种不同的行号报告:

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)

I don't know if I'm useful here, but in case it helps... 我不知道我在这里是否有用,但万一它有帮助......

Your memory might be not enough to load all data at first. 您的内存可能不足以首先加载所有数据。 I met that problem too when making my game with AndEngine, too much Atlas with size bigger than 1024x1024 , data might be broken. 我在使用AndEngine进行游戏时遇到了这个问题,太多的Atlas尺寸大于1024x1024,数据可能会被打破。

No solution, just observations. 没有解决方案,只是观察。

The call to eglSwapBuffers returns false . eglSwapBuffers的调用返回false The following error handling does not cope with the case that there is no error -- potentially it has not been set by EGL; 以下错误处理不能处理没有错误的情况 - 可能它没有被EGL设置; OR the return value is wrong. 或者返回值是错误的。

I did not find matching sources. 我找不到匹配的来源。 These devices either run patched GLSurfaceView s (the stack trace search did not find anything...) or they use an in-between version (well, I don't know if 4.0.2 was official, grepcode contains only 4.0.1 and 4.0.3); 这些设备要么运行修补的GLSurfaceView (堆栈跟踪搜索没有找到任何东西......)或者他们使用中间版本(好吧,我不知道4.0.2是否正式,grepcode只包含4.0.1和4.0.3); OR I've missed something. 或者我错过了什么。

You have to track down which exact devices/android versions run into this problem. 您必须跟踪哪些确切的设备/ Android版本遇到此问题。 Then you could try to workaround this problem by providing a patched GLSurfaceView yourself, or using a different EGL config -- provided the problem can be fixed at all. 然后,您可以尝试通过自己提供修补的GLSurfaceView或使用不同的EGL配置来解决此问题 - 前提是问题可以解决。 There are bugs that are left unhandled for weeks; 几个星期未处理的错误 ; wondering what greater problems the responsible team faces... 想知道责任团队面临的更大问题......

The solution I ended up implementing was to add a global exception handler to catch this error (since it's thrown outside of any thread I have control over). 我最终实现的解决方案是添加一个全局异常处理程序来捕获此错误(因为它被抛出我控制的任何线程之外)。

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

So at least the application doesn't crash and I can put up a message explaining the situation. 所以至少应用程序不会崩溃,我可以提出一条消息来解释这种情况。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM