Android - GLSurfaceView EGL_BAD_ALLOC

far*_*ich 12 android opengl-es

我的程序在两个之间切换Activities,每个程序都GLSurfaceView使用VBO扩展派生.在两个活动之间来回切换几次后,程序崩溃并抛出以下异常.每次有上下文切换时,都会删除VBO缓冲区,调用onStop(),并且下一个Activity的新实例GLSurfaceView会膨胀.我重构程序上只有一个运行GLSurfaceViewActivity,程序似乎没有发生任何事件运行.仅使用多边形和颜色,没有纹理.这是损害:


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

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

编辑:我解决了问题(我打算在视图上调用ONPAUSE()/ ONRESTART()).第一个接受任何关于+2的任何人的答案.

zen*_*hoy 18

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

此图像(来自活动文档)非常好地显示了此活动生命周期:

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

  • 现在这很容易赚到+200 (2认同)