Android - GLSurfaceView EGL_BAD_ALLOC - PullRequest
12 голосов
/ 18 мая 2011

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

1 Ответ

18 голосов
/ 01 июня 2011

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

На этом изображении (из Документация к действию ) очень хорошо показан жизненный цикл этого действия:

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

Короче, не забудьте передать onPause и onResume как своему супер, так и GLSurfaceView.

From http://android -developers.blogspot.com / 2009/04/introduction-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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...