簡體   English   中英

在GLKView中使用CIFilter后顯示CIImage

[英]Displaying CIImage after using CIFilter in GLKView

嘗試在GLKView中呈現由CIFilter過濾的CIImage時,我總是收到錯誤消息。 錯誤是“CoreImage:EAGLContext幀緩沖或渲染緩沖區配置錯誤!無效的着色器程序,可能是因為超出了硬件資源而無法加載內核!”

我用以下代碼來顯示Image:

- (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。

可能是什么導致了這個?

“無效的着色器程序,可能是由於超出了硬件資源”和“無法加載內核!” 實際上是明顯的錯誤,但前者似乎缺乏一個換行符。 我昨天遇到了這個問題,似乎有這個問題的一些來源:

  • 檢查幀緩沖區狀態以確保它已完成 - glCheckFramebufferStatus(GL_FRAMEBUFFER)應返回GL_FRAMEBUFFER_COMPLETE - 有關GL_FRAMEBUFFER_COMPLETE ,請參閱OpenGL ES編程指南

  • 在我的例子中,我為Core Image使用的幀緩沖添加了一個深度緩沖區。 核心圖像顯然不喜歡這樣 - 一旦我刪除了深度緩沖區渲染緩沖區,兩個錯誤消息都消失了,Core Image做了它的事情。

我遇到了同樣的問題,刪除深度緩沖區刪除了錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM