私はiOS用のopengl esアプリを作成しています。私はEAGLContext用のスレッドを作成し、このスレッド上のすべてのOpenGLを実行し、完了したらperformSelectorOnMainThread
とpresentRenderbuffer
を使用してレンダリングバッファを画面に表示します。ios opengles present UIView描画がアプリクラッシュの原因となったときに表示するレンダーバッファ
私のopenglビューの上に他のUIViewがない場合は、すべてが問題ありませんが、私のopenglビューの上にビューを追加すると、物事が不安定になり始めます。時々UIViewがアニメーション化されていると、openglコールクラッシュが発生し、時にはglClear
、時にはpresentRenderbuffer
にクラッシュすることがあります。アイフォーン6プラスでは特に問題があります。スクリーン解像度が高いためです。
私は間違ったことをやっているのですか?UIViewでアニメーションがクラッシュするのを防ぐために、OpenGLレンダリングを停止することができますか?
ワウ!アドバイスマンに感謝!私はこのダブルバッファメソッドを実装しようとし、それがどのように動作するかを教えてくれるでしょう –
メインのレンダーバッファ上で '[EAGLContext renderbufferStorage]'を呼び出す必要があります。私はダブルバッファを実装するときに、私は描画のための2バッファを作成する場合、私はそれらの両方で 'renderbufferStorage'を呼び出す必要があります。今私がやっていることは、レンダリングスレッドで2つの完全なfboを作成することです。描画する前に、フロントfboをバインドし、レンダーバッファに 'renderbufferStorage'を呼び出してから描画します。描画を終えた後、私はfboを切り替え、古いfronバッファをメインスレッドにプッシュし、プレゼンテーションを行います。だから、フレームごとに 'renderbufferStorage'を呼び出す必要があります。これはあなたのところにぴったりですか? –
いいえ、私はあなたができるだけ積み込み時間に2回呼び出すべきだと思います。私はそれがうまくいくかどうかはわかりません。 renderbufferStorageは実際にレンダリングバッファを生成するので、前のものを削除する必要があります。最初のメインスレッドで両方を初期化してみてください。 –