0

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

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();       
    }
}

这就是动画结束后我能做的全部清理工作吗?我一直使用这个渲染器,几分钟后我总是内存不足。

4

1 回答 1

1

我一直使用这个渲染器,几分钟后我总是内存不足。

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

于 2012-10-12T13:26:44.727 回答