我的渲染器如下所示:

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


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

最佳答案

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


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

10-07 22:16