Android - GLSurfaceView EGL_BAD_ALLOC

时间:2011-05-18 02:02:28

标签: android opengl-es

我的程序在两个Activities之间切换,每个GLSurfaceView对使用VBO的派生GLSurfaceView进行充气。在两个活动之间来回切换几次后,程序崩溃并抛出以下异常。每次有上下文切换时,都会删除VBO缓冲区,调用onStop(),并且下一个Activity GLSurfaceView的新实例会膨胀。我重构了程序,只运行一个Activity Java.lang.RuntimeException: createContext failed: EGL_BAD_ALLOC at android.opengl.GLSurfaceView$EglHelper .throwEglException(GLSurfaceView.java:1079) at android.opengl.GLSurfaceView$EglHelper .throwEglException(GLSurfaceView.java:1071) at android.opengl.GLSurfaceView$EglHelper .start(GLSurfaceView.java:927) at android.opengl.GLSurfaceView$GLThread .guardedRun(GLSurfaceView.java:1248) at android.opengl.GLSurfaceView$GLThread .run(GLSurfaceView.java:1118) ,程序似乎没有发生任何事故。仅使用多边形和颜色,没有纹理。这是损害:

{{1}}

从做一些互联网研究,这是一个recognized bug。那么如何进行损害控制呢?在正确的方向上轻推+200。

编辑:我解决了问题(我打算在视图上调用ONPAUSE()/ ONRESTART())。第一个人要求任何关于任何事情的答案+200。

1 个答案:

答案 0 :(得分:18)

令人讨厌我还不能发表评论,但我认为你的意思是onResume,而不是onRestart。您的活动可以暂停而不会被停止,这会导致onPause,但不会导致onRestart。

此图片(来自Activity docs)非常好地展示了此活动的生命周期:

http://developer.android.com/images/activity_lifecycle.png

简而言之,请记住将onPause和onResume传递给你的super和GLSurfaceView。

来自http://android-developers.blogspot.com/2009/04/introducing-glsurfaceview.html

public class ClearActivity extends Activity {
    ... snip ...

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }

    private GLSurfaceView mGLView;
}