私はちょうど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
シミュレータのビューの1つに32の倍数ではない次元がありますか?もしそうなら、あなたはこの問題にぶつかっているかもしれません:http://stackoverflow.com/questions/4430288/why-cant-i-see-certain-opengl-es-charts-in-the-4-2-simulator/4430726# 4430726、OpenGLのコンテンツがレンダリングされなくなる原因になります。 –
なぜ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シーンに結合することをお勧めします。 –
ああ、リンクありがとう!私は幅の問題が実際にビューが32の倍数ではなかったことを確認できます。そうであれば、少なくとも1つのOpenGLレイヤがある限り、シミュレータはレンダリングされます。 私は独自のOpenGLレイヤーを使用するサードパーティ製のコンポーネントを使用しているので、この場合は1つのレイヤーだけを使用したいと考えています。しかし、もう一度お返事ありがとう! – j0h