![](/img/trans.png)
[英]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.