Я гоняюсь за ошибкой в своей игре, думаю, наконец-то нашел проблему.
У меня есть подпрограмма управления памятью, которая вызывается при предупреждении памяти, она в основном проверяет, что загружено и не нужнои выпускает это.Большая часть моей памяти используется в текстурах для opengl, так что помимо текстур мне нужно всего лишь сбросить несколько объектов, чтобы система была довольна даже на 3G с ограниченным объемом памяти.
Теперь моя проблема св некоторых случаях я теряю контекст openGL, например, при воспроизведении фильма с помощью MPMoviePlayerController или при вызове системных представлений GC.
Несколько раз загрузка GC или MPMovie будет совпадать с вызываемой процедурой управления памятьюэто то, что я думаю, это сбой игры, так как у меня нет контекста opengl, я получаю:
malloc: *** error for object 0x471c9080: pointer being freed was not allocated
при попытке glDeleteTextures.
Теперь я меняю свойкод, поэтому я не пытаюсь удалить текстуры в недопустимом контексте (все еще проверяя, как это сделать), но у меня все еще остается проблема с тем, что делать, когда я получаю предупреждение о памяти во время отключения контекста opengl.
Я вижу только одну опцию
- Перед вызовом чего-то, что заставит меня потерять контекст, попробуйте освободить память
Мне не особенно нравится эта опция, потому что она вводит задержку в некоторых операциях.
- Кто-нибудь видит лучший способ?
- Правильно ли проанализирован мой анализ проблемы?(Действительно ли я теряю контекст opengl при использовании MPlayer и GC)
- Любой другой способ освободить текстуры?
Thx