카메라에서 비디오를 가져 와서 CoreImage 및 OpenGL을 사용하여 렌더링하려고합니다. 내가 실행 중일 때 예상대로 화면에 그림이 표시되고 EXEC_BAD_ACCESS가 표시됩니다. ARC를 사용하고 있습니다. iOS6 Beta1. 제발 도와주세요.cicontext drawImage : inRect : fromRect가 ios6에서 충돌 함
업데이트 : 5.1에서 작동하지만 6.0에서는 작동이 중단됩니다. 모든 예외 중단 점을 발생 시켰지만 EXEC_BAD_ACESS가 presentRendBuffer> gpus_ReturnGuiltyForHardwareRestart에서 발생합니다.
업데이트 2 : 카메라 관련 코드를 제거했지만 여전히 충돌이 발생합니다.
업데이트 3 : glClearColor & glClear 명령을 내 주석으로 처리하면 내 앱이 중지되는 문제를 해결했습니다. 하지만 Core Image와 함께 OpenGL을 동시에 사용하는 방법을 알고 싶습니다.
내 새로운 코드로 간단하게 :이 코드는 아이폰 & 아이 패드 6.0 시뮬레이터에서 작동
@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];
}
; iPad2 iOS 6.0 Beta2에서 EXEC_BAD_ACCESS로 충돌합니다.
Invalid shader program, probably due to exceeding hardware resourcesCould not load the kernel!Could not load the kernel! ...
것은 무엇 잘못 될 수 있습니다 그리고 그것은 나를 콘솔의 메시지와 아이 패드 1 & 아이폰 4S 아이폰 OS 5.1.1에 단지 녹색 화면 준다?
iOS5.x에서 충돌이 발생합니까? –
아니요, 5.1.1에서는 내 iPhone에서 작동하지만 6.0에서는 iPad에서 작동하지 않습니다. 지난 번 콘솔에서 메시지를 받았습니다. 백그라운드에서 처리 중이기 때문에 GPU를 사용하여 렌더링 할 수 없습니다. 화면으로 렌더링 할 때 CPU로 되돌릴 수 없습니다. 렌더링이 실패 할 수 있습니다! (lldb) drawImage : inRect : fromRect가 iOS6에서는 비동기이지만 iOS5에서는 동기화가 원인 일 수 있습니까? – Seify
명령 + 6을 누르십시오. 왼쪽 하단의 작은 플러스 버튼을 클릭하십시오. "Add Exception Breakpoint"를 선택하십시오. 완료를 클릭하십시오. 응용 프로그램을 다시 실행하십시오. 예외의 정확한 위치를 볼 수 있습니다. 더 나은 피드백을 얻으려면 여기에보고하십시오. –