java - 在android中有效清理opengl动画?

标签 java android animation memory opengl-es

我的渲染器看起来像这样:

public void onDrawFrame(GL10 gl) {
    if(draw) {
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glFrontFace(GL10.GL_CW);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);

        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
                textures[i]);

        gl.glGenTextures(1, textures, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);

        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

        bitmap.recycle();
    } else {
        gl.glDeleteTextures(textures.length, textures, 0);
        gl.glFlush();       
    }
}

动画结束后我能做的就是清理这些吗?我一直使用这个渲染器,几分钟后我总是出现内存不足的情况。

最佳答案

I use this renderer all the time and after a few minutes I always get out of memory.

您不应该在每一帧都重新创建所有纹理。您创建它们一次并重复使用它们。如果您想在保持格式和尺寸的同时更新图片,请在现有纹理对象上使用 glTexSubImage2D。

关于java - 在android中有效清理opengl动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12859963/

相关文章:

html - 在 CSS 3 中,为什么使用 `@keyframes` 在这里不起作用?

java - 用 superg 重新绘制会导致空白..netbeans

android - Kotlin : safe lambdas (no memory leak)?

java - 当我从 ListActivity 而不是 ActionBarActivity 扩展时,为什么 ActionBar 不显示?

android - 在后退按钮上 "IllegalStateException: Can not perform this action after onSaveInstanceState"

R: "InvalidArgument ` -delay' 带动画和 ggplot

javascript - 我如何为由于调用了 $.fadeIn() 的其他附近元素而移动的元素设置动画?

java - 我的 Eclipse + apache tomcat/6.0.30 停止提供文件

Java数组复制和2D数组复制混淆

java - 列数与第 1 行的值数不匹配