Утечка памяти при изменении GLKBaseEffect

Я пытаюсь сделать два объекта с помощью GLKit. Изначально я пытался сделать это:

[Cube drawViewController:self.effect CameraMatrix:&lookatmatrix];

//turn off lighting for floor
self.effect.light0.enabled = GL_FALSE;
[Floor drawViewController:self.effect CameraMatrix:&lookatmatrix];
self.effect.light0.enabled = GL_TRUE;

Однако это, кажется, вызывает утечку памяти. Я где-то читал, что:

Каждое изменение "фундаментальных" свойств (lightingType, lightModelTwoSided, colorMaterialEnabled,...) приведет к загрузке новой шейдерной программы при следующем вызове prepareToDraw.

Если я удаляю изменения self.effect.light0.enabled и запускаю следующее, у меня не возникает проблема утечки памяти:

[Cube drawViewController:self.effect CameraMatrix:&lookatmatrix];

//turn off lighting for floor
//self.effect.light0.enabled = GL_FALSE;
[Floor drawViewController:self.effect CameraMatrix:&lookatmatrix];
//self.effect.light0.enabled = GL_TRUE;

Я попытался создать 2 разных GLKBaseEffects, но второй объект не будет правильно отображать слово.

drawViewController вызывает prepareToDraw и выглядит следующим образом:

-(void) drawViewController:(GLKBaseEffect *)effect CameraMatrix:(GLKMatrix4 *)cameramatrix
{
    GLKMatrix4 modelViewMatrix = GLKMatrix4Multiply(*cameramatrix, modelMatrix);
    effect.transform.modelviewMatrix = modelViewMatrix;
    [effect prepareToDraw];
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, *TextureID);
    glBindVertexArrayOES(modelvertdata.vertexArray);
    glDrawArrays(GL_TRIANGLES, 0, modelvertdata.NumVerts);
}

0 ответов

Другие вопросы по тегам