Утечка памяти при изменении 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);
}