Запуск утилиты инструментов для игры, которую я пишу, показывает кучу утечек памяти, связанных с копированием с помощью Zone, когда я перебираю массив и рисую несколько простых объектов куба.
Я не уверен, что лучший способчтобы отследить это, поскольку я новичок в программировании OpenGL.Моя программа использует ARC и настроена на сборку для IOS 5. Я инициализирую GLKit для использования OPenGl 2.0 и использую BafeEffect, поэтому мне не нужно писать свои собственные шейдеры и т. Д. Это не должно быть ракетостроением.Я предполагаю, что я не должен выпускать что-то в функции рисования.Ниже приведен код моей функции рисования.Не могли бы вы, ребята, взглянуть и посмотреть, является ли проблема чем-то особенным?
Еще одна вещь, на которую стоит обратить внимание: я использую 15 разных текстур, кубы могут быть 1 из 15 разных.У меня есть свойство, установленное в классе куба для текстуры, и я устанавливаю его, когда создаю куб в массиве.Но я загружаю все 15, когда мой просмотр программ запускается. Это небольшие файлы .jps размером менее 75 КБ каждый, и каждый куб использует одну и ту же текстуру, поэтому не должен быть слишком большой проблемой.
Вот код моей функции рисования:
- (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);
}