我很難找到任何示例如何正確使用核心圖像與GLKView
爲了順利呈現核心圖像「食譜」響應用戶輸入。所以,在閱讀Core Image Programming Guide和GLKView
class reference之後,我提出了一種可行的方法。但是,我不確定它是否有效,所以我希望有人能夠確認它沒問題,或者指出我有更好的方向。核心圖像與GLKView
現在,我正在使用GLKView
和GLKViewController
。 GLKView
代表將繪製到其父視圖控制器,它實現glkView:drawInRect:
。繪圖方法是這樣的:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
// make glkView's background light gray instead of black
glClearColor(backgroundRGB, backgroundRGB, backgroundRGB, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// a custom object that holds a reference to a CIContext
ImageEditingContext* context = [ImageEditingContext getInstance];
// apply a core image recipe
CIImage *outputImage = [context getFilteredPreviewCIImage];
// draw the image
CGRect inRect = outputImage.extent;
inRect.origin.y = (self.glkView.contentScaleFactor * self.glkView.frame.size.height - inRect.size.height)/2.0;
[context.coreImageContext drawImage:outputImage inRect:inRect fromRect:outputImage.extent];
}
具體來說,我很關心最後一行,[context.coreImageContext drawImage:outputImage inRect:inRect fromRect:outputImage.extent]
。從glkView:drawInRect:
內調用該方法是否有效?正如我之前提到的,這種方法似乎工作正常,但運行OpenGL ES分析工具模板後我開始懷疑它。它標記這個問題行:
多情境渲染用途沒有同花順: 渲染#2 - 你的應用程序中使用已在不同的上下文中被更新,而後續的刷新操作的渲染對象。
我GLKView
和CIContext
都設置了相同的EAGLContext
,所以我不太知道什麼是錯誤消息指。任何有識之士都非常感謝!
據我所知,你的代碼是一樣好,因爲它可以得到。正如您已經注意到的那樣,您正在使用您的視圖所繪製的同一個GL上下文創建CI上下文,並且該警告特別涉及在另一個上下文中採取的操作。我的猜測是CI會創建自己的私有GL上下文(使用與您傳入的上下文相同的共享組),在其中完成所有工作,並在完成時不進行清理。 (Ewww。)[歸檔錯誤](http://bugreport.apple.com)可能是一個好主意。 – rickster
感謝您的參與,@ rickster!我會繼續並提交一個錯誤。 – gilby
@gilby你有沒有想過出了什麼問題。對於幾乎相同的代碼,我遇到了同樣的問題。 – otusweb