[英]How to implement contentMode for GLKView displaying a 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.