1

CAEAGLLayer をサポートするサブクラスまたは UIView があります。このビューは全画面表示ではなく、コンテナー UIView のサブビューです。このコンテナーは、UINavigationController スタック内の UIViewController によって制御されます。スタックに新しいビューをプッシュしてポップすると、すべて問題なく、OpenGL ビューを表示して操作できます。ナビゲーション コントローラー スタックに別のビューをプッシュしてメモリ警告をトリガーし、そのビューをポップすると、OpenGL ビューはまだ存在し、その backgroundColor をレンダリングしますが、OpenGL コンテンツは表示されません。viewDidAppear で描画メソッドをトリガーすると、コンテンツが再描画されていることがわかります (デバッガーで描画メソッドをステップ実行でき、コンテキストが null でない、レイヤーが null でないなど)。しかし、presentRenderBuffer の呼び出し後に OpenGL コンテンツが表示されません。 :

明らかに、メモリ警告が発生したときに何かが解放されましたが、まだ UIView があり、EAGLContext を持つ CAEAGLLayer があります (少なくとも nil ではありません)。

おそらくそれらが解放されたと考えて、ビューが再表示されたときに描画する前に、フレームバッファーとレンダーバッファーを破棄して再作成しようとしました。

EAGLLayer.drawableProperties を設定して、kEAGLDrawablePropertyRetainedBacking キーを YES に設定してみました。

OpenGL コンテンツが表示されないのはなぜですか?

最後に 1 つ: GLKView を使用する必要があることはわかっていますが、iOS 4.2 をサポートする必要があります。

4

0 に答える 0