主にiPadでOpenGL ESを使い始めたばかりで、答えが見つからない問題に気づきました。最初に、同じウィンドウで別々のレンダラーを使用して 2 つの EAGLView を使用してみました。基本的に、XCode の OpenGL ES サンプル プロジェクトを考えますが、2 つの EAGLViews と 2 つのレンダラーなどを使用します。現在、これはシミュレーターでは機能していないようです。ビューの 1 つしか表示されません (レンダリング コードを実行しているように見えますが、ビューは 1 つだけです)。 openGL で表示されます) が、デバイス (iOS 4.2 を使用する iPad) で実行すると動作し、少なくとも次の質問につながります。
レンダリングの更新は、これらの両方のビューで CADisplayLink を使用してトリガーされます。ただし、これはいくつかの問題を引き起こします。ほとんどの場合、しばらくするとビューの 1 つでの更新が停止し、その CADisplayLink のトリガーが停止します。これはデバイス上でのみ発生し、シミュレーターでは発生しません。CADisplayLinkの代わりにタイマーを使用するか、一方のビューでタイマーを使用し、もう一方のビューでDisplayLinkを使用することで「修正」できますが、何が原因なのか知りたいです。私はこのような表示リンクを作成しています(両方のビューで):
self.displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView:)];
[displayLink setFrameInterval:animationFrameInterval];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
最後の質問は、私が気づいた奇妙なことについてです。Xcode で提供されている OpenGL ES サンプル プロジェクトを iPad シミュレーターで実行し、ビューの幅を 760 未満に変更すると、画面に何もレンダリングされません。幅のみに関係しますが、高さはどのような方法でもサイズ変更できます。これはシミュレーターでのみ発生し、デバイスでは発生しません。
質問は基本的に、上記のことがバグなのか、機能なのか、それとも単に間違っているのかということです。
ありがとう /j0h