cicontext drawImage:inRect:fromRect在ios6中崩溃
我正在尝试从相机中获取视频,并使用CoreImage和OpenGL进行渲染。 当我运行它时,我在屏幕上看到我的图片,就像我期望的那样,然后我得到了EXEC\u BAD\u访问权限。 我用的是ARC。iOS6β1。 请帮我修一下 更新:它在5.1中工作,但在6.0中崩溃。 我已经引发了所有异常断点,但我只看到在PreSentrendeBuffer>GPU ReturnGuiltyForHardwareRestart中发生了执行错误 更新2:我已经删除了与摄像头相关的代码,但它仍然崩溃 更新3:当我注释掉glClearColor和glClear命令时,我的应用程序停止崩溃。但我仍然想知道如何同时使用OpenGL和核心图像 我的新代码非常简单: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:当我
@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做了一些重大更改,我在自己的测试中也看到了这一点,所以有一两件事情可能会在测试版中出现问题也就不足为奇了。