我有一个视图控制器,其视图使用OpenGL ES。当取消分配该视图控制器时,是否还需要执行其他工作来“关闭”OpenGL?或者一旦视图控制器不存在,手机是否会切换出“OpenGL模式” - 如果存在这样的事情?
答案 0 :(得分:3)
没有真正的“OpenGL模式”。在iOS上,您可以通过EAGLContext类创建一个上下文来进行渲染:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
在此上下文中,您需要设置至少一个帧缓冲对象(FBO)并将其附加到CAEAGLLayer中,您可以在其中进行实际绘图:
glGenFramebuffers(1, &viewFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer);
glGenRenderbuffers(1, &viewRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
在执行任何OpenGL ES绘图之前指定当前上下文:
[EAGLContext setCurrentContext:context]
然后将该图形渲染到附加到CAEAGLLayer的FBO中,从而使其显示在屏幕上。这个内容与你的界面的其余部分合成,所以没有真正改变模式来做OpenGL绘图,它只是你界面中的另一个视图。
当您完成托管OpenGL内容的视图时,您无需关闭任何内容,但最好清理您使用过的所有资源。使用glDeleteFramebuffers()
和glDeleteRenderbuffers()
来清理您的FBO,glDeleteTextures()
表示您使用的任何纹理,glDeleteBuffers()
表示任何VBO等等。