2011-01-11 18 views
0

私はちょうどiPadでOpenGL ESで遊んで始めましたが、私は答えが見つからないいくつかの問題に気付きました。まず、同じウィンドウ内に別々のレンダラーを使用して2つのEAGLViewを使用しようとしました。基本的にXCodeのOpenGL ESサンプルプロジェクトは2つのEAGLViewと2つのレンダラーなどがあると考えています。これはシミュレータでは機能しないようですが、レンダリングコードを実行しているようですが、 OpenGLで表示されますが、デバイス(iOS 4.2を使用しているiPad)上で動作すると動作しますが、少なくともその種類は次の質問につながります。iPhone/iPad、OpenGL ES、CADisplayLink

これらのビューの両方でCADisplayLinkを使用して、レンダリングの更新がトリガーされます。しかし、これはいくつかの問題を引き起こす。ほとんどの場合、ちょっと待ってから、ビューの1つの更新が停止し、そのCADisplayLinkがトリガを停止します。これは、デバイスでのみ発生し、シミュレータでは発生しません。これは、CADisplayLinkの代わりにタイマーを使うか、あるビューではタイマーを使用し、もう一方ではDisplayLinkを使用することで「固定」することができます。なぜなら、これを引き起こしていることを知りたいのですが。私は(両方のビューで)このような表示リンクを作成しています:

self.displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView:)];

[displayLink setFrameInterval:animationFrameInterval];

[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

さて最後の質問は、私は気づいた奇妙なことについてです。 iPadシミュレータでXcodeで提供されているOpenGL ESサンプルプロジェクトを、幅が760未満のビューでサイズ変更すると、画面に何も描画されません。幅に関係なく、高さはどのようにでも変更できます。シミュレータでのみ発生し、デバイスでは発生しません。

基本的に上記のことがバグや機能なのか、それとも間違っているのかという疑問がありますか? NSDefaultRunLoopMode:

おかげ /j0h

+0

シミュレータのビューの1つに32の倍数ではない次元がありますか?もしそうなら、あなたはこの問題にぶつかっているかもしれません:http://stackoverflow.com/questions/4430288/why-cant-i-see-certain-opengl-es-charts-in-the-4-2-simulator/4430726# 4430726、OpenGLのコンテンツがレンダリングされなくなる原因になります。 –

+0

なぜ2つのOpenGL ESレイヤが必要ですか?コンポジットのため、これを行うとパフォーマンスが低下する可能性があります:http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html%23//apple_ref/doc/uid/ TP40008793-CH103-SW29。可能であれば、2つのビューを1つのOpenGL ESシーンに結合することをお勧めします。 –

+0

ああ、リンクありがとう!私は幅の問題が実際にビューが32の倍数ではなかったことを確認できます。そうであれば、少なくとも1つのOpenGLレイヤがある限り、シミュレータはレンダリングされます。 私は独自のOpenGLレイヤーを使用するサードパーティ製のコンポーネントを使用しているので、この場合は1つのレイヤーだけを使用したいと考えています。しかし、もう一度お返事ありがとう! – j0h

答えて

0

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

+0

また、NSTimerのヒントに感謝します。私はそう簡単に見つけられませんでした! – user1021430