Подтвердить что ты не робот

Android - GLSurfaceView EGL_BAD_ALLOC

Моя программа переключается между двумя Activities, которые каждый раздувают производный GLSurfaceView, который использует VBOs. Несколько раз переключаясь между двумя действиями, программа вылетает и выдает следующее исключение. Каждый раз, когда имеется контекстный переключатель, буферы VBO удаляются, вызывается onStop(), а новый экземпляр следующего действия GLSurfaceView раздувается. Я реорганизовал программу для работы только с одним 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)

Из нескольких интернет-исследований это признанная ошибка. Итак, как я могу контролировать ущерб? +200 для подталкивания в правильном направлении.

РЕДАКТИРОВАТЬ: Я РЕШАЛ ПРОБЛЕМУ (Я ВЫБИРАЛ, ЧТОБЫ ПРИЗЫВАТЬ ONPAUSE()/ONRESTART() НА ПРОСМОТРАХ). ПЕРВЫЙ ЧЕЛОВЕК ОТПРАВЛЯЕТ ОТВЕТ ОТ НИЧЕГО, ЧТО ТАКОЕ ПОЛУЧИТ +200.

4b9b3361

Ответ 1

Досадно, что я еще не могу оставлять комментарии, но я думаю, что вы имеете в виду onResume, а не onRestart. Ваша активность может быть приостановлена ​​без остановки, что вызовет onPause, но не onRestart.

Этот образ (из Activity docs) показывает этот жизненный цикл активности очень красиво:

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

Короче говоря, не забудьте передать onPause и onResume как для вашего супер, так и для 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;
}