我有一个看起来相当奇怪的情况。我会试着提供足够的细节,让比我聪明的人能够解释这个问题。基本上,这是设置的方式:
这里的问题是:我可以成功地渲染一个相当复杂的场景,而且它可以无限地运行数小时而不会泄漏任何内存。Dalvikvm 每 3-5 分钟在 logcat 中出现一次,如果我不尝试退出我的应用程序并再次运行它,就不会有任何问题。实际上,我可以重新启动我的应用程序两次,但第三次,我会得到 GL_OUT_OF_MEMORY 错误。
我已经将错误追踪到了 gl.glDrawArrays() 调用。我可以确认,在所讨论的 DrawArrays 调用之前,gl.glGetError() 返回 0,而在之后它将返回 1285(GL_OUT_OF_MEMORY)。
自然地,我认为我没有清理资源和释放 OpenGL 上下文。以下是当应用程序被关闭时我所做的事情。
当我运行我的应用程序前两次时,关闭时没有返回任何错误。然而,在第3次尝试中,我得到了上述错误,我追踪到了
请帮忙解决,因为我想不出其他办法了!
OS: Android 2.2 Froyo
Device: SGS Vibrant
Application: OpenGL-ES 1.1
这里的问题是:我可以成功地渲染一个相当复杂的场景,而且它可以无限地运行数小时而不会泄漏任何内存。Dalvikvm 每 3-5 分钟在 logcat 中出现一次,如果我不尝试退出我的应用程序并再次运行它,就不会有任何问题。实际上,我可以重新启动我的应用程序两次,但第三次,我会得到 GL_OUT_OF_MEMORY 错误。
我已经将错误追踪到了 gl.glDrawArrays() 调用。我可以确认,在所讨论的 DrawArrays 调用之前,gl.glGetError() 返回 0,而在之后它将返回 1285(GL_OUT_OF_MEMORY)。
自然地,我认为我没有清理资源和释放 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
错误。对象被渲染,但纹理是黑色的。
请帮忙解决,因为我想不出其他办法了!