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 に答える