CoreImage: фреймбуфер EAGLContext или буфер рендеринга настроен неправильно

Когда я настраиваю GLKViewController/GLKView для рисования с помощью CoreImage, я иногда получаю уведомление в заголовке.

Настройка выглядит следующим образом:

_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

self.view.context = _context;
self.view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
self.view.backgroundColor = UIColor.blackColor;
self.view.contentScaleFactor = UIScreen.mainScreen.scale;

glGenRenderbuffers(1, &_render_buffer);
glBindRenderbuffer(GL_RENDERBUFFER, _render_buffer);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

_core_image_context = [CIContext contextWithEAGLContext: _context];

[EAGLContext setCurrentContext:_context];

У меня есть подпредставления UIKit в GLKView, и кажется, что когда я добавляю/удаляю представления, это каким-то образом временно делает контекст недействительным. Дело в том (за исключением некоторых редких случаев, когда мне все же нужно загнать в угол) следующее обновление я могу нарисовать в контексте без проблем.

Я могу повторить попытку рисования, если это не удается, но как я могу узнать, что контекст недействителен? Как я должен обнаружить это или предотвратить его признание недействительным?


person hlidotbe    schedule 15.02.2012    source источник


Ответы (1)


GLKView устанавливает буфер рендеринга и управляет им. Явно вызывая glGenRenderBuffers() и glBindRenderbuffer(), вы путаете конфигурацию GLKView.

person Mr. Berna    schedule 12.12.2012