Мне было трудно найти какие-либо примеры того, как правильно использовать Core Image с GLKView
, чтобы плавно отображать «рецепты» Core Image в ответ на вводимые пользователем данные. Итак, после прочтения Руководства по программированию основных изображений и GLKView
справочник по классу , Я придумал подход, который работает. Однако я не уверен, что это действительно так, поэтому я надеюсь, что кто-то может подтвердить, что это нормально, или указать мне лучшее направление.
Прямо сейчас я использую GLKView
с GLKViewController
. GLKView
делегирует рисование своему родительскому контроллеру представления, который реализует glkView:drawInRect:
. Метод рисования делает это:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
// make glkView's background light gray instead of black
glClearColor(backgroundRGB, backgroundRGB, backgroundRGB, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// a custom object that holds a reference to a CIContext
ImageEditingContext* context = [ImageEditingContext getInstance];
// apply a core image recipe
CIImage *outputImage = [context getFilteredPreviewCIImage];
// draw the image
CGRect inRect = outputImage.extent;
inRect.origin.y = (self.glkView.contentScaleFactor * self.glkView.frame.size.height - inRect.size.height) / 2.0;
[context.coreImageContext drawImage:outputImage inRect:inRect fromRect:outputImage.extent];
}
В частности, меня беспокоит последняя строка, [context.coreImageContext drawImage:outputImage inRect:inRect fromRect:outputImage.extent]
. Допустимо ли вызывать этот метод из glkView:drawInRect:
? Как я упоминал ранее, этот подход, кажется, работает нормально, но я стал подозревать его после запуска шаблона OpenGL ES Analysis Instruments. Он пометил строку с этой проблемой:
Использование многоконтекстного буфера рендеринга без сброса: Renderbuffer # 2 - ваше приложение использовало объект рендербуфера, который был обновлен в другом контексте без последующей операции сброса.
Мои GLKView
и CIContext
оба настроены с одним и тем же EAGLContext
, поэтому я не совсем уверен, о чем идет речь в сообщении об ошибке. Любое понимание очень ценится!