eglSwapBuffers失败:EGL_BAD_ALLOC AndEngine Android

5

我正在使用And Engine开发一款游戏,但是出现了异常。实际上我不知道异常发生的具体位置。这个问题已经在市场上传了很多次。

    java.lang.RuntimeException: eglSwapBuffers failed: EGL_BAD_ALLOC
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1080)
at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1038)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1364)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)

有没有解决这个问题的方案?

你找到这个问题的解决方案了吗? - user874649
我的应用在Nexus 7上运行良好,但在Sony Ericsson Xperia上失败了。我删除了唯一使用的EGL调用(ConfigChooser),然后在Xperia上就可以正常工作了。 - paj7777
你能用一段代码来解释吗? - Jawad Amjad
在GLSurfaceView的构造函数中,我调用了setEGLConfigChooser(8,8,8,8,0,0)。我删除了这段代码,不再出现异常,所以我猜测我使用的配置设置有问题。希望这可以帮到你。 - paj7777
抱歉,我直接使用openGL。我没有使用AndEngine的经验。您是否已经检查了纹理大小是否导致了问题? - paj7777
显示剩余2条评论
2个回答

2
当您没有通知GLSurfaceView关于Activity的状态转换时,就会出现此错误。请参见以下来自此处的段落:http://developer.android.com/reference/android/opengl/GLSurfaceView.html

Activity生命周期

当Activity暂停和恢复时,必须通知GLSurfaceView。GLSurfaceView客户端需要在Activity暂停时调用onPause(),并在Activity恢复时调用onResume()。这些调用允许GLSurfaceView暂停和恢复渲染线程,并允许GLSurfaceView释放和重新创建OpenGL显示。

我不知道andengine是如何处理这个问题的。

1
但是onPause和onResume已经处理了。您还有什么建议吗? - Jawad Amjad
很抱歉,我不知道这个错误的其他原因。对于我来说,通知GLSurfaceView解决了这个问题。如果有帮助的话:尝试通过反复在主屏幕和游戏之间切换来重新创建它。这就是我遇到这个错误的地方。 - haffax

1
根据我的经验(仅适用于我的三星Note,而不是我目前测试过的任何其他Android设备),eglSwapBuffers()会错误地产生EGL_BAD_ALLOC,而不是EGL_BAD_CURRENT_SURFACE。如果您的代码处理重新创建表面,则应该很容易处理这种晦涩的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接