2

私が書いているゲームに対してinstrumentsユーティリティを実行すると、配列を循環していくつかの単純な立方体オブジェクトを描画するときに、Zoneでのコピーに関連する大量のメモリリークが表示されます。

私はOpenGLプログラミングに慣れていないので、これを追跡するための最良の方法がわかりません。私のプログラムはARCを使用しており、IOS5用にビルドするように設定されています。GLKitを初期化してOPenGl2.0を使用し、BafeEffectを使用しているので、独自のシェーダーなどを作成する必要はありません。これはロケット科学ではありません。描画関数内で何かを解放してはいけないと思います。以下は私の描画関数のコードです。皆さん、見て、問題として目立つものがあるかどうかを確認していただけますか?

もう1つ注意すべき点は、15の異なるテクスチャを使用していることです。立方体は、15の異なるテクスチャの1つにすることができます。テクスチャのキューブクラスにプロパティを設定し、配列にキューブを作成するときにプロパティを設定します。しかし、プログラムビューがロードを開始したときに15個すべてをロードします。これらはそれぞれ75k未満の小さな.jpsファイルであり、各キューブはずっと同じテクスチャを使用しているので、それほど大きな問題にはなりません。

これが私の描画関数のコードです:

- (void)draw
{
    GLKMatrix4 xRotationMatrix = GLKMatrix4MakeXRotation(rotation.x);
    GLKMatrix4 yRotationMatrix = GLKMatrix4MakeYRotation(rotation.y);
    GLKMatrix4 zRotationMatrix = GLKMatrix4MakeZRotation(rotation.z);
    GLKMatrix4 scaleMatrix     = GLKMatrix4MakeScale(scale.x, scale.y, scale.z);
    GLKMatrix4 translateMatrix = GLKMatrix4MakeTranslation(position.x, position.y, position.z);

    GLKMatrix4 modelMatrix = GLKMatrix4Multiply(translateMatrix,GLKMatrix4Multiply(scaleMatrix,GLKMatrix4Multiply(zRotationMatrix, GLKMatrix4Multiply(yRotationMatrix, xRotationMatrix))));

    GLKMatrix4 viewMatrix = GLKMatrix4MakeLookAt(0, 0, 1, 0, 0, -5, 0, 1, 0);
    effect.transform.modelviewMatrix = GLKMatrix4Multiply(viewMatrix, modelMatrix);

    effect.transform.projectionMatrix = GLKMatrix4MakePerspective(0.125*M_TAU, 1.0, 2, 0); 
    effect.texture2d0.name = wallTexture.name;
    [effect prepareToDraw];

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);

    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, triangleVertices);
    glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
    glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates);
    glDrawArrays(GL_TRIANGLES, 0, 18);

    glDisableVertexAttribArray(GLKVertexAttribPosition);
    glDisableVertexAttribArray(GLKVertexAttribTexCoord0);

}
4

1 に答える 1

2

GLKBaseEffect の prepareToDraw メソッドが iOS 5.1 でリークしているようです。ここで同じ漏れの問題。prepareToDraw にコメントすると、漏れはありません。

回避方法: GLKBaseEffect を使用しないでください。

于 2012-04-12T17:24:52.193 に答える