2013-07-11 2 views
0

Наконец-то я нашел, почему на некоторых устройствах Samsung все текстуры выглядят белыми.Android: проверьте, потерян ли контекст opengl

Похоже, что когда пользователь открывает игру, иногда текстуры не загружаются, и пользователь должен свести к минимуму и восстановить игру, чтобы вызвать метод onResume() и снова загрузить текстуры. Мой код - просто огромный беспорядок, поэтому я действительно не знаю, что найти корень проблемы и исправить ее (игра находится на стадии выхода на пенсию, а не стоит проводить дни). Я думаю о работе.

Так что мой вопрос в том, как я могу проверить, потерял ли OpenGL? Изменена ли какая-либо переменная? Могу ли я проверить, существует ли конкретная текстура в контексте?

Я знаю, что это потеряет его, когда приложение переходит на задний план, но в моем случае это не тот случай.

ответ

1

Я не совсем понимаю, как вы загружаете свои текстуры. OnResume должно быть хорошим местом для этого, если вы разместили их в onPause ... просто чтобы освободить некоторую память, когда пользователь покидает активность. Во всяком случае, я придерживаюсь вашего вопроса.

В простом случае вы должны инициализировать свои текстуры внутри onSurfaceCreated. Кроме того, не делать что-то вроде этого:

if(texture != null) 
    texture = initializeTexture(); 

потому что это не означает, что он загружен в OPENGL памяти, это просто ссылка на объект Java, который много раз живет дольше, чем контекст OpenGL (особенно если это статическая)

Некоторые Offical документ:

http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html

EGL Контекст Проиграл

Бывают ситуации, когда контекст рендеринга EGL будет потерян. Обычно это происходит, когда устройство просыпается после сна. Когда контекст EGL будет потерян, все ресурсы OpenGL (такие как текстуры), которые связаны с этим контекстом, будут автоматически удалены. В для правильного отображения рендеринга визуализатор должен воссоздать любые потерянные ресурсы , которые ему по-прежнему нужны. Метод onSurfaceCreated (GL10, EGLConfig) - это удобное место для этого.

Смежные вопросы