Нет реального «режима 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]
, а затем этот чертеж отображается в вашем FBO, прикрепленном к CAEAGLLayer, что приводит к его отображению на экране. Этот контент составлен с остальной частью вашего интерфейса, так что нет никакого реального изменения режима для рисования OpenGL, это просто другое представление в вашем интерфейсе.
Когда вы закончите с представлением, на котором размещен ваш контент OpenGL, вам не нужно ничего отключать, но было бы неплохо очистить любые ресурсы, которые вы использовали. Используйте glDeleteFramebuffers()
и glDeleteRenderbuffers()
для очистки ваших FBO, glDeleteTextures()
для любых используемых вами текстур, glDeleteBuffers()
для любых VBO и т. Д.