GLKit Память Утечка - PullRequest
       19

GLKit Память Утечка

2 голосов
/ 21 марта 2012

Запуск утилиты инструментов для игры, которую я пишу, показывает кучу утечек памяти, связанных с копированием с помощью 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);

}

1 Ответ

2 голосов
/ 12 апреля 2012

Кажется, что метод prepareToDraw GLKBaseEffect протекает в iOS 5.1.Та же проблема с утечкой.Если я прокомментирую prepareToDraw -> нет утечки.

Как обойти: Не используйте GLKBaseEffect.

...