1

マニュアルはちょうどあなたに書くように指示しました:

glDeleteTextures(1, &GLtexture);

そして、テクスチャが削除されると主張します。iPhoneのメモリはほとんどないので、これらのテクスチャが本当にリリースされるようにしたいと思います。

Leaks機器はこれを検出できず、率直に言って、私は少し心配しています。テクスチャが本当になくなっていることを確認したいのですが。

ありがとうございました。

4

2 に答える 2

3

テクスチャはObj-cランタイムによって処理されないため、リークはテクスチャについて何も知りません。別のツールを使用する必要があります。

Xcodeで、OpenGLテンプレートを使用して新しいプロジェクトを開始します。シーンを更新/描画するメソッドを検索し、このコードを最後に追加します。

static int tick = -1;
static GLuint tex[5];

if (tick++ < 0)
    for (int f = 0; f < 5; f++)
        tex[f] = 0;

tick = tick % 5;
if (tex[tick]) {
    glDeleteTextures(1, &tex[tick]);
    tex[tick] = 0;
} else {
    glGenTextures(1, &tex[tick]);
    glBindTexture(GL_TEXTURE_2D, tex[tick]);
    char *mem = malloc(1024 * 1024 * 4);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
        1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem);
    free(mem);
}

このコードは、OpenGLコマンドを使用して5つのテクスチャを生成および破棄します。ビルドしてデバイスで1回実行し、インストールされていることを確認します。チャギングについて心配する必要はありません。

次に、機器を開き、iPhone用の空白のテンプレートから始めます。ライブラリを開き、メモリモニターをウィンドウにドラッグします。情報開示ボタンをクリックし、「PhysicalMemoryFree」以外のすべてのチェックを外します。次に、iPhoneでバイナリを起動して録音を開始することを選択します。Instrumentsがアプリケーションをサンプリングしようとするタイミングに応じて、階段のパターンが上下するのがわかります。プログラムの実行中は、「実メモリ」列ですべてのアクティブなプロセスを確認でき、実際のメモリ使用量を示します。

私のテストでは、この例は、メモリサンプリングの瞬間に応じて、25MBから3MBを消費します。これは、第2世代のiPhoneおよびSDK3.1を使用したものです。2.x SDKを使用している場合は、通常のOpenGLモニターでGART常駐オブジェクトサイズを検索する必要があります。詳細については、 http://blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/を参照してください。

いずれにせよ、メモリが上下にジャンプすることは、glDeleteTexture()がアドバタイズされたとおりに機能することを証明します。

于 2009-09-14T21:36:16.253 に答える
0

glDeleteTextures(int, int*)割り当てテーブルを維持する独自の関数でへの呼び出しをラップします。

于 2009-09-14T10:44:14.100 に答える