首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用GLKView实现核心图像

用GLKView实现核心图像
EN

Stack Overflow用户
提问于 2014-03-01 02:54:03
回答 1查看 1.9K关注 0票数 3

我很难找到关于如何在GLKView中正确使用Core的任何示例,以便能够根据用户的输入顺利地呈现Core“食谱”。因此,在阅读了核心图像编程指南类引用之后,我想出了一种可行的方法。但是,我不确定它是否有效,所以我希望有人可以确认它是否正常,或者为我指明一个更好的方向。

现在,我使用的是GLKViewGLKViewControllerGLKView将绘图委托给其父视图控制器,其父视图控制器实现glkView:drawInRect:。绘图方法是这样做的:

代码语言:javascript
复制
- (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分析工具模板之后,我对它产生了怀疑。它在这条线上标出了这一问题:

在没有刷新的情况下使用多上下文Renderbuffer : Renderbuffer #2 --您的应用程序使用了一个呈现缓冲区对象,该对象已经在不同的上下文中更新,而没有后续的刷新操作。

我的GLKViewCIContext都是用相同的EAGLContext设置的,所以我不太清楚错误消息是指什么。任何洞察力都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2014-12-17 13:43:16

我用glkview成功地完成了这件事。它使用OpenGL感知视图自动设置缓冲区。您根本不需要缓冲区代码,实际上,如果设置得当,glkview需要大约3行代码。这个应用程序很困惑,因为它会自动为您设置缓冲区,然后您会创建第二个缓冲区,并且不会为每个帧刷新它,从而导致许多内存问题。似乎您也在创建多个上下文,这也是一个否。阅读CIImage编程指南。我有一个UISlider,它使用glkview实时调整图像。您所需要做的就是从bindDrawable初始化glkview、drawImage和CIContext。确保您的CIContext是用EaglContext初始化的。您是对的,一个thing....the文档是不存在的。祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22109498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档