gpt4 book ai didi

ios - 在 GLKView 中使用 CIFilter 后显示 CIImage

转载 作者:可可西里 更新时间:2023-11-01 06:16:51 27 4
gpt4 key购买 nike

当我尝试在 GLKView 中呈现由 CIFilter 过滤的 CIImage 时,我总是收到错误消息。错误是“CoreImage:EAGLContext 帧缓冲区或渲染缓冲区配置不正确!无效的着色器程序,可能是由于超出硬件资源无法加载内核!”

我用来显示图像的以下代码:

- (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 - 请参阅 OpenGL ES programming guide举个例子。

  • 在我的例子中,我向 Core Image 使用的帧缓冲区添加了一个深度缓冲区。 Core Image 显然不喜欢这样 - 一旦我删除了深度缓冲区渲染缓冲区,两条错误消息都消失了,Core Image 做了它的事情。

关于ios - 在 GLKView 中使用 CIFilter 后显示 CIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com