2012-03-21 3 views
2

Запуск утилиты инструментов против игры, которую я пишу, показывает кучу утечек памяти, связанных с копией с зоной, когда я просматриваю массив и рисую некоторые простые объекты куба.GLKit Memory Leak copywithZone

Я не уверен, что лучший способ отслеживать это, поскольку я новичок в программировании OpenGL. Моя программа использует ARC и настроена на сборку IOS 5. Я инициализирую GLKit использовать OPENGl 2.0 и используя BafeEffect, поэтому мне не нужно писать свои собственные шейдеры и т. Д. Это не должно быть наукой о ракетах. Я предполагаю, что я должен что-то не выпускать в рамках функции рисования. Ниже приведен код моей функции рисования. Не могли бы вы, ребята, взглянуть и посмотреть, что-то отличное от проблемы?

Еще одна вещь, которую нужно отметить, это то, что я использую 15 различных текстур, кубы могут быть 1 из 15 разных. У меня есть свойство, установленное в классе куба для текстуры, и я устанавливаю его, когда создаю куб в массиве. Но я загружаю все 15, когда мои просмотры программ загружали starts.They - маленькие .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); 

} 
+0

У меня похожие проблемы. Вы что-нибудь узнали? –

+1

Да, это настоящая ошибка Apple. Мне пришлось записать звонок поддержки. Я должен получить кредит. Его проблема с подготовкой к рисованию в GLKit. Я представил его как ошибку в соответствии с поддержкой Apple. Работа над ним заключалась в том, чтобы нарисовать его с обычными opengl. Они предложили использовать пример opengl и посмотреть, кто они рисуют кубики, один из которых имеет gl kit, другой - с нормальным открытым gl .. – TommyT39

ответ

2

Метод prepareToDraw из GLKBaseEffect, кажется, протекает в прошивкой 5.1. Здесь же проблема утечки. Если я комментирую prepareToDraw -> нет утечки.

Как обходить: не использовать GLKBaseEffect.

+0

также GLKSkyboxEffect – chunkyguy