У меня ситуация довольно странная. Я постараюсь предоставить достаточно подробностей, чтобы кто-нибудь умнее меня мог это объяснить. В основном вот настройка:
OS: Android 2.2 Froyo
Device: SGS Vibrant
Application: OpenGL-ES 1.1
И вот проблема: я могу успешно визуализировать довольно сложную сцену, и она может работать бесконечно в течение нескольких часов без утечки памяти. Dalvikvm появляется в logcat каждые 3-5 минут, и не было бы никаких проблем, если бы я не попытался выйти из приложения и запустить его снова. Фактически я могу перезапустить свое приложение 2 раза, но в третий раз я получаю GL_OUT_OF_MEMORY
.
Я отследил ошибку вплоть до вызова gl.glDrawArrays ()
. Я могу подтвердить, что gl.glGetError ()
возвращает 0 до рассматриваемого вызова DrawArrays, и он вернет 1285 (GL_OUT_OF_MEMORY) после вызова DrawArrays.
Естественно, я думал, что я не очищать ресурсы и не освобождать контекст OpenGL. Вот что я делаю, когда приложение закрывается.
for(int x=0; x<buffers.length; x++){
if(gl.glIsBuffer(buffers[x])){
gl.glDeleteBuffers(1, buffers, x);
buffers[x]=0;
}
}
for(int y=0; y<textures.length; y++){
if(gl.glIsTexture(textures[y])){
gl.glDeleteTextures(1, textures, y);
textures[y]=0;
}
}
System.out.println("ERROR: "+gl.glGetError());
finish();
Когда я запускаю свое приложение первые два раза, я не получаю никаких ошибок при завершении работы. Однако при третьей попытке я получаю вышеупомянутую ошибку, которую я отследил до вызова gl.glDrawArrays ()
.
Вот краткое описание того, что происходит во время третьего запуска:
Объекты 1-56 проходят соответствующие вызовы gl.glDrawArrays ()
, как горячие ножи сквозь масло. Ошибок не генерируется.
Объекты 57-64 генерируют ошибку GL_OUT_OF_MEMORY
. Объекты визуализируются, но текстура черная.
Я более чем уверен, что удаляю все буферы и текстуры при завершении работы приложения. Я также уверен, что эта ошибка характерна не только для одной 3D-модели, поскольку я пытался пропустить модель № 57, но затем № 58 по-прежнему будет получать эту ошибку.
Пожалуйста, помогите, так как у меня заканчиваются идеи!