2011-05-05 2 views
2

OpenGL ES를 사용하는보기가있는보기 컨트롤러가 있습니다. View Controller가 할당 해제되면 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()를 사용 glDeleteTextures()는 텍스처를 위해 당신은 어떤 VBOs에 대한 glDeleteBuffers()

+0

감사 브래드를 사용했습니다! 그게 내가 생각한거야.하지만 전문가 한테 듣고 싶었어. – jmosesman

관련 문제