当我循环遍历数组并绘制一些简单的立方体对象时,针对我正在编写的游戏运行仪器实用程序会显示大量与区域复制相关的内存泄漏。
我不确定追踪这个问题的最佳方法,因为我是 OpenGL 编程的新手。我的程序使用 ARC 并设置为 IOS 5 构建。我正在初始化 GLKit 以使用 OPenGl 2.0 并使用 BafeEffect,因此我不必编写自己的着色器等。这不应该是火箭科学。我猜我一定没有在绘图函数中释放某些东西。下面是我的绘图函数的代码。你们能看一下是否有什么突出的问题吗?
另一件事要注意的是,我使用了 15 种不同的纹理,立方体可以是 15 种不同纹理中的一种。我在纹理的立方体类上设置了一个属性,并在在数组中创建立方体时设置它。但当我的程序 View 加载开始时,我会加载所有 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);
}
最佳答案
GLKBaseEffect的prepareToDraw方法似乎在iOS 5.1中泄漏。这里同样存在泄漏问题。如果我评论prepareToDraw ->没有泄漏。
如何规避:不要使用 GLKBaseEffect。
关于ios - GLKit 内存泄漏 copywithZone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9808933/