2012-02-17 1 views
4

GLKView 내부에서 CIFilter로 필터링 된 CIImage를 표시 할 때 항상 오류 메시지가 나타납니다. 오류 : "CoreImage : EAGLContext framebuffer 또는 renderbuffer가 잘못 구성되었습니다! 잘못된 쉐이더 프로그램, 아마도 하드웨어 리소스를 초과했기 때문에 커널을로드 할 수 없습니다!"GLKView에서 CIFilter를 사용한 후의 CIImage 표시

나는 이미지를 표시하는 데 사용할 다음 코드 :

- (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 유형입니다.

이 문제의 원인은 무엇일까요?

답변

0

"하드웨어 리소스 초과로 인해 유효하지 않은 쉐이더 프로그램"및 "커널을로드 할 수 없습니다!" 실제로는 별개의 오류이지만, 전자는 줄 바꿈이 부족한 것처럼 보입니다. 어제이 문제를 가지고,이 문제의 몇 가지 소스가있는 것 같다

  • 확인이 완료 보장하기 위해 프레임 버퍼 상태 - glCheckFramebufferStatus(GL_FRAMEBUFFER)GL_FRAMEBUFFER_COMPLETE를 반환해야합니다 - 예제는 OpenGL ES programming guide 참조가.

  • 필자의 경우 Core Image에서 사용하는 프레임 버퍼에 깊이 버퍼를 추가했습니다. 코어 이미지는 분명히 이것을 좋아하지 않았습니다. 깊이 버퍼 렌더 버퍼를 제거하고 나면 두 오류 메시지가 사라지고 Core Image가 그 일을 처리했습니다.

0

동일한 문제가 발생하여 깊이 버퍼를 삭제하면 오류가 제거됩니다.