0

主に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

4

1 に答える 1

0

2 つの OpenGL ビューを同時に実行し、それぞれが別々の CADisplayLink で実行され、両方とも forMode: NSDefaultRunLoopMode を実行している同様の問題を発見しました。iOS 5.1 を実行している iPhone 4S でテストした場合、MPMediaPickerController を終了するときにビューの 1 つがレンダリングを停止することを除いて、問題はありませんでした。しかし、iOS 5.0.1 を実行している iPod Touch 第 3 世代では、(CADisplayLink が起動しないため) どちらかのビューがランダムにレンダリングを停止するという問題に気付きました。両方のビューで NSTimer に切り替えることで修正できました (どちらか一方だけでは機能しません)。32 の倍数にサイズ変更しても、私には何の違いもありませんでした。

于 2012-06-07T22:50:51.743 に答える