最後に問題を解決することができました。
私が使用していたView Controllerの1つで:
dispatch_async(openGLESContextQueue, ^{
[(EAGLView *)self.view setFramebuffer];
(...opengl draw code...)
[(EAGLView *)self.view presentFramebuffer];
});
マルチスレッド環境で EAGLContext を使用する場合は、他のスレッドが同時にアクセスしないように注意する必要があります。
@syncronized(context) { ...opengl drawing here...}
次を使用して、別のViewControllerに制御を渡す前に現在のdispatch_queueを排出します(presentViewController :を介して)。
dispatch_sync(openGLESContextQueue, ^{});
したがって、これら 2 つのトリックを使用することで、複数のビューで 1 つの EAGLContext を使用することができました。EAGLContext の現在の状態にも特に注意を払う必要があります。最初のビューで私が持っていたので、私は予期しない結果を持っていました:
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
2番目のビューでは、まったく異なる描画コードがあり、もちろん、使用するのを忘れていました:
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
そして出来上がり!
ありがとう :)