マニュアルはちょうどあなたに書くように指示しました:
glDeleteTextures(1, &GLtexture);
そして、テクスチャが削除されると主張します。iPhoneのメモリはほとんどないので、これらのテクスチャが本当にリリースされるようにしたいと思います。
Leaks機器はこれを検出できず、率直に言って、私は少し心配しています。テクスチャが本当になくなっていることを確認したいのですが。
ありがとうございました。
テクスチャは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()がアドバタイズされたとおりに機能することを証明します。
glDeleteTextures(int, int*)
割り当てテーブルを維持する独自の関数でへの呼び出しをラップします。