cicontext drawImage:inRect:fromRect在ios6中崩溃

cicontext drawImage:inRect:fromRect在ios6中崩溃,ios,memory-management,opengl-es,core-image,glkit,Ios,Memory Management,Opengl Es,Core Image,Glkit,我正在尝试从相机中获取视频,并使用CoreImage和OpenGL进行渲染。 当我运行它时,我在屏幕上看到我的图片,就像我期望的那样,然后我得到了EXEC\u BAD\u访问权限。 我用的是ARC。iOS6β1。 请帮我修一下 更新:它在5.1中工作,但在6.0中崩溃。 我已经引发了所有异常断点,但我只看到在PreSentrendeBuffer>GPU ReturnGuiltyForHardwareRestart中发生了执行错误 更新2:我已经删除了与摄像头相关的代码,但它仍然崩溃 更新3:当我

我正在尝试从相机中获取视频,并使用CoreImage和OpenGL进行渲染。 当我运行它时,我在屏幕上看到我的图片,就像我期望的那样,然后我得到了EXEC\u BAD\u访问权限。 我用的是ARC。iOS6β1。 请帮我修一下

更新:它在5.1中工作,但在6.0中崩溃。 我已经引发了所有异常断点,但我只看到在PreSentrendeBuffer>GPU ReturnGuiltyForHardwareRestart中发生了执行错误

更新2:我已经删除了与摄像头相关的代码,但它仍然崩溃

更新3:当我注释掉glClearColor和glClear命令时,我的应用程序停止崩溃。但我仍然想知道如何同时使用OpenGL和核心图像

我的新代码非常简单:

@interface MGViewController () {
...
}
@property (strong, nonatomic) EAGLContext *glcontext;
@property (strong, nonatomic) CIContext *cicontext;
@property (strong, nonatomic) CIImage *ciimage;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.glcontext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    if (!self.glcontext) {
        NSLog(@"Failed to create ES context");
    } else {
        self.cicontext = [CIContext contextWithEAGLContext:self.glcontext];

        if (!self.cicontext){
            NSLog(@"Failed to create CI context");
        }
    }

    GLKView *view = (GLKView *)self.view;
    view.context = self.glcontext;
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;

    self.ciimage = [[CIImage alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"roomphoto" withExtension:@"png"]];
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{

        glClearColor(0.0, 0.5, 0.0, 1.0);
        glClear(GL_COLOR_BUFFER_BIT);

        [self.cicontext drawImage:self.ciimage
                           inRect:self.ciimage.extent
                         fromRect:self.ciimage.extent];
}
此代码适用于iPhone和iPad 6.0模拟器;iPad2 iOS 6.0 Beta2上的EXEC_BAD_访问崩溃;在iPad1和iPhone4SiOS5.1.1上,它给了我一个绿色屏幕,控制台上有这样的信息:

Invalid shader program, probably due to exceeding hardware resourcesCould not load the kernel!Could not load the kernel! ...

有什么问题吗?

最后,我成功阻止了应用程序崩溃。 我刚刚在gl命令和[cicontext drawImage…]命令之间添加了glFlush()

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{

        glClearColor(0.0, 0.5, 0.0, 1.0);
        glClear(GL_COLOR_BUFFER_BIT);

        glFlush();

        [self.cicontext drawImage:self.ciimage
                           inRect:self.ciimage.extent
                         fromRect:self.ciimage.extent];
}
结果并不完美:我可以看到一些不安等,但至少它起作用了。
不过,我希望您能详细回答原因。

drawImage:inRect:fromRect在iOS 6中是异步的。

它在iOS 5.x上会崩溃吗?不会,它在我的iPhone 5.1.1上工作,但在我的iPad 6.0上失败。上次我在控制台中收到消息:无法使用GPU渲染,因为进程在后台。渲染到屏幕时无法返回CPU-渲染可能会失败!(lldb)这可能是因为drawImage:inRect:fromRect在iOS6中是异步的,但在iOS5中是同步的吗?Hit命令+6。单击左下角的小加号按钮。选择“添加异常断点”。单击完成。再次运行应用程序。您将看到异常的确切位置。在这里报告以获得更好的反馈。Exeption不会启动,只是在PreSentrendeBuffer>GPU ReturnGuiltyForHardwareStart中发生EXEC_坏访问。如果在iOS 5.x上运行它,但在iOS 6.0测试版上崩溃,我认为这很明显是一个测试版错误。我建议您在提交bug报告时,最好是使用一个复制此报告的测试项目。这将有助于核心形象团队在正式发布之前解决这个问题。谢谢你的建议,我会试试这个。这个数字。与他们交谈时,他们对6.0版的Core Image做了一些重大更改,我在自己的测试中也看到了这一点,所以有一两件事情可能会在测试版中出现问题也就不足为奇了。