У меня ситуация довольно странная. Я постараюсь предоставить достаточно подробностей, чтобы кто-нибудь умнее меня смог это объяснить. В основном вот установка:
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();
Когда я запускаю приложение первые два раза, я не получаю никакой ошибки при завершении работы. Однако с 3-й попытки я получаю вышеупомянутую ошибку, которую отследил до вызова gl.glDrawArrays()
.
Вот краткое описание того, что происходит во время 3-го запуска:
Объекты 1-56 проходят свои соответствующие gl.glDrawArrays()
звонки, как горячие ножи через масло. Ошибки не генерируются.
Объекты 57-64 генерируют ошибку GL_OUT_OF_MEMORY
. Объекты визуализируются, но текстура черная.
Я более чем уверен, что удаляю все буферы и текстуры при завершении работы приложения. Я также уверен, что эта ошибка не относится только к одной 3D-модели, так как я попытался пропустить модель № 57, но затем № 58 все равно получит эту ошибку.
Пожалуйста, помогите, поскольку у меня заканчиваются идеи!