1

我有一个带有 CAEAGLLayer 支持的子类或 UIView。这个视图不是全屏的,是一个容器 UIView 的子视图。此容器由 UINavigationController 堆栈中的 UIViewController 控制。如果我在堆栈上推送一个新视图然后将其弹出,一切都很好,我仍然可以看到 OpenGL 视图并与之交互。如果我在导航控制器堆栈上推送另一个视图然后触发内存警告,然后弹出该视图,OpenGL 视图仍然存在并呈现其背景颜色,但 OpenGL 内容不可见。在 viewDidAppear 上触发它的 draw 方法,我可以看到它重绘了它的内容(我可以在调试器中逐步执行它的 draw 方法,并且上下文不为空,图层不为空等)但是,在调用 presentRenderBuffer 后,OpenGL 内容不会出现:

显然,发生内存警告时释放了一些东西,但我仍然有一个 UIView 并且它有一个带有 EAGLContext 的 CAEAGLLayer(至少它们不是 nil)。

当视图重新出现时,我尝试在绘制之前销毁并重新创建帧缓冲区和渲染缓冲区,认为这些可能已被释放。

我尝试将 EAGLLayer.drawableProperties 设置为包括设置为 YES 的 kEAGLDrawablePropertyRetainedBacking 键。

为什么OpenGL内容不会出现?

最后一点:我知道 GLKView 可能是我应该使用的,但我需要支持 iOS 4.2。

4

0 回答 0