GLKit内存泄漏copywithZone

时间:2012-03-21 16:36:46

标签: ios memory opengl-es memory-leaks glkit

针对我正在编写的游戏运行仪器实用程序,当我在数组中循环并绘制一些简单的立方体对象时,会显示与使用Zone复制相关的一堆内存泄漏。

我不确定跟踪此问题的最佳方式,因为我是OpenGL编程的新手。我的程序正在使用ARC并且设置为IOS 5构建。我正在初始化GLKit以使用OPenGl 2.0并使用BafeEffect,因此我不必编写自己的着色器等。这不应该是火箭科学。我猜我必须不在draw函数中释放一些东西。下面是我的绘图功能的代码。你们可以看一下,看看有什么问题突出吗?

另外需要注意的是,我使用了15种不同的纹理,立方体可以是15种不同的纹理中的1种。我在纹理的立方体类上设置了属性,我将其设置为在数组中创建立方体。但是当我的程序视图加载启动时,我会加载所有15个。它们是小的.jps文件,每个小于75k,每个立方体使用相同的纹理,所以不应该是一个大问题。

以下是我的绘图功能的代码:

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

}

1 个答案:

答案 0 :(得分:2)

GLKBaseEffect的prepareToDraw方法似乎在iOS 5.1中泄漏。同样的泄漏问题在这里。如果我评论prepareToDraw - >没有泄漏。

如何规避:不要使用GLKBaseEffect。