【问题标题】:java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS reportjava.lang.RuntimeException:eglSwapBuffers 失败:EGL_SUCCESS 报告
【发布时间】:2012-06-03 14:45:57
【问题描述】:

我有安卓游戏,使用 libgdx 框架

Google Play 商店有报道:

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)

我能做什么?

报告的设备:三星 GT-S5830i、三星 Galaxy Y、LGE LG-P990、摩托罗拉 Photon 4G、摩托罗拉 Droid X2,

【问题讨论】:

标签: android opengl-es libgdx


【解决方案1】:

此问题已报告here before。已有an issue 归档。

您可以通过提供有关此问题的更多详细信息来提供帮助。

【讨论】:

    【解决方案2】:

    我做了一些研究,发现这个问题发生在低端设备中,因为它们的内存不足。在两个场景之间加载和卸载纹理会使 SwapBuffer 崩溃并因此引发此 Runtime 异常。

    这个问题最烦人的是,当我在这样的设备上测试时,我没有收到任何这样的错误,但是在 playstore 中我收到了太多关于这个问题的报告。

    所以,我们可以通过两种方式解决这个问题:

    1)从兼容列表中过滤掉低端设备。

    2) 使用UncaughtExceptionHandler() 捕获异常并告诉用户内存不足的问题。

    【讨论】:

      【解决方案3】:

      上次编辑中的解决方案。


      它实际上也发生在我的低端设备上(GT-S5830GT-S5830i)。

      问题是,它不是因为内存不足而发生的;我记录了我的游戏的当前内存使用情况,它没有超过 3 兆字节,而我有大约 80 兆字节或更多兆字节的可用内存。我什至一直运行System.gc(),这提示垃圾收集器释放一些内存空间。

      我没有解决方法,但我会在找到答案后立即更新此答案。


      经过一番搜索,gpu 相关的东西(如纹理)不是由垃圾收集器管理的(这就是为什么它们应该手动处理)。所以打电话System.gc() 是毫无意义的。不过,我正在处理我的所有纹理,而且我的游戏的内存使用率非常低。


      我尝试了各种解决方案,但没有任何效果,但这里应该可以解决问题(没有尝试过这个,但应该可以):

      1. 只是不要一遍又一遍地加载这么多纹理。每当用户离开屏幕时,我的游戏都会处理然后初始化所有纹理。这可能是导致问题的原因。您需要做的是将加载的纹理/纹理图集保存在内存中(不要丢失它们的参考)。这样,导航回屏幕不会重新加载所有纹理。

      2. 避免使用原始的 Textures,而是使用 POT(二的幂) TextureAtlas

      我会将这两个步骤应用到我的项目中,如果问题消失,我会回来确认我的解决方案。


      这根本不是问题。我运行了一个非常长的纹理处理和加载循环,没有抛出异常/错误。我的上述建议不是解决方案。该问题可能与过度的Screen 切换有关,但我想不会,因为在将屏幕方向从纵向模式反复更改为横向模式时也会发生此问题,反之亦然。


      解决方案:

      我认为GamesetScreen(screen) 会自动调用Screendispose()(事实并非如此)。 dispose() 用于处理我所有的底层纹理。 我只是通过在Screenhide() 重写方法中调用dispose() 解决了这个问题。

      使用TextureAtlass 非常重要,因为您可以减少每个Texture 附加的句柄数量。 (这可能是 EGL_SUCCESS 错误的原因)

      GT-S5830GT-S5830i(三星 Galaxy Ace 和三星 Galaxy Y)上测试。问题不再出现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-11
        • 2010-11-14
        相关资源
        最近更新 更多