2011-05-05 81 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