Отображение CIImage после использования CIFilter в GLKView - PullRequest
4 голосов
/ 17 февраля 2012

Я всегда получаю сообщение об ошибке при попытке представить CIImage, отфильтрованный по CIFilter, внутри GLKView. Ошибка "CoreImage: EAGLContext framebuffer или renderbuffer неправильно настроен! Неправильная программа шейдера, возможно, из-за превышения аппаратных ресурсов. Не удалось загрузить ядро! "

Следующий код, который я использую для отображения изображения:

- (void)viewDidLoad 
{
    [super viewDidLoad]; 
    EAcontext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    if (!EAcontext) {
        NSLog(@"Failed to create ES context");
    }
    GLKView *view = (GLKView *)self.view;
    view.context = self.EAcontext;
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;

    glGenRenderbuffers(1, &_renderBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
    glGenRenderbuffers(1, &_colorBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _colorBuffer);

    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8_OES, 768, 1024);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _colorBuffer);

    coreImageContext = [CIContext contextWithEAGLContext:self.EAcontext];

    [self updateView];
}

- (void)updateView
{
    UIImage *myimage = [UIImage imageNamed:@"Moskau1.jpg"];
    CIImage *outputImage = [[CIImage alloc] initWithImage:myimage];

    [coreImageContext drawImage:outputImage inRect:self.view.bounds fromRect:[outputImage extent]];    

    [EAcontext presentRenderbuffer:GL_RENDERBUFFER_OES];
}

Viewcontroller - это GLKViewcontroller. EAContext имеет тип CIContext.

Что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 01 июля 2012

Я столкнулся с той же проблемой, и удаление буфера глубины устранило ошибку.

0 голосов
/ 07 июня 2012

«Неверная программа шейдера, возможно, из-за превышения аппаратных ресурсов» и «Не удалось загрузить ядро!»на самом деле отчетливая ошибка, но в первом, похоже, отсутствует разрыв строки.Я получил эту проблему вчера, и, кажется, есть несколько источников этой проблемы:

  • Проверьте состояние буфера кадра, чтобы убедиться, что оно завершено - glCheckFramebufferStatus(GL_FRAMEBUFFER) должно вернуть GL_FRAMEBUFFER_COMPLETE -см., например, Руководство по программированию OpenGL ES .

  • В моем случае я добавил буфер глубины в кадровый буфер, используемый Core Image.Базовому изображению явно не понравилось это - как только я удалил буфер визуализации буфера глубины, оба сообщения об ошибках исчезли, и Базовое Изображение сделало свое дело.

...