Наконец-то удалось решить проблему.
В одном из контроллеров представления я использовал:
dispatch_async(openGLESContextQueue, ^{
[(EAGLView *)self.view setFramebuffer];
(...opengl draw code...)
[(EAGLView *)self.view presentFramebuffer];
});
При использовании EAGLContext в многопоточной среде нужно быть осторожным, чтобы другие потоки не могли одновременно получить к нему доступ, используя:
@syncronized(context) { ...opengl drawing here...}
и слить текущую очередь dispatch_queue перед передачей управления другому ViewController (через presentViewController :), используя:
dispatch_sync(openGLESContextQueue, ^{});
Итак, используя эти два трюка, я смог просто использовать один EAGLContext для нескольких представлений. Необходимо также обратить особое внимание на текущее состояние EAGLContext. У меня были неожиданные результаты, потому что на первый взгляд у меня было:
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
Во втором представлении у меня был совершенно другой код рисования, и я, конечно, забыл использовать:
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
И вуаля!
Спасибо:)