Нужно ли «выключать» OpenGL ES? - PullRequest
2 голосов
/ 05 мая 2011

У меня есть контроллер представления с представлением, использующим OpenGL ES.Когда этот контроллер представления освобождается, нужно ли выполнять какие-либо другие действия, чтобы «закрыть» OpenGL?Или, если контроллер представления не существует, переключится ли телефон в «режим OpenGL» - если такая вещь существует?

1 Ответ

3 голосов
/ 06 мая 2011

Нет реального «режима 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 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...