2011-05-05 118 views
2

我有一个使用OpenGL ES的视图的视图控制器。当视图控制器被释放时,是否还有其他工作需要完成以关闭OpenGL?或者一旦视图控制器不存在,手机是否会切换到“OpenGL模式” - 如果存在这种情况?OpenGL ES需要“关闭”吗?

回答

3

没有真正的“OpenGL模式”。在iOS上,创建一个上下文通过EAGLContext类中做你的渲染:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

在此背景下,你需要至少设置一个帧缓冲对象(FBO)和它连接到CAEAGLLayer你做你的实际的绘图:

[EAGLContext setCurrentContext:context] 

,然后该图形是在呈现到您的FBO:

glGenFramebuffers(1, &viewFramebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer); 

glGenRenderbuffers(1, &viewRenderbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); 

[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer]; 

你做任何的OpenGL ES绘制之前指定当前上下文传送到CAEAGLLayer,这会导致它显示在屏幕上。这个内容是与你的其他界面合成的,所以OpenGL绘图模式没有真正的改变,它只是你界面中的另一个视图。

当您完成托管OpenGL内容的视图时,不需要关闭任何内容,但清理所有已使用的资源将是一个不错的主意。使用glDeleteFramebuffers()glDeleteRenderbuffers()来清理你的FBO,glDeleteTextures()对于你使用的任何纹理,glDeleteBuffers()对于任何VBOs等。

+0

感谢Brad!这就是我的想法,但我想从专业人士那里听到。 – jmosesman 2011-05-11 04:48:29