문제

그래서 나는 CIImage 내가 그리려고 하는 것 NSView'에스 -drawRect 방법.

다음은 이미지를 그리기 위해 호출하는 코드 줄입니다.

[outputCoreImage drawInRect: [self bounds]
                   fromRect: originalBounds
                  operation: NSCompositeSourceOver
                   fraction: 1];

outputCoreImage, originalBounds, 그리고 [self bounds] 모두 비-nil, 실제로 각각의 예상 값입니다.Lion(OS X 10.7)에서는 제대로 작동했지만 Mountain Lion(OS X 10.8)에서는 EXC_BAD_ACCESS 이 라인에.스택을 살펴보면 중단된 내부 함수 호출이 켜져 있음을 알 수 있습니다. CGLGetPixelFormat.

frame #0: 0x00007fff99c3b26d OpenGL`CGLGetPixelFormat + 27
frame #1: 0x00007fff8fa98978 CoreImage`-[CIOpenGLContextImpl createAccelContext] + 335
frame #2: 0x00007fff8fa98d30 CoreImage`-[CIOpenGLContextImpl updateContext] + 111
frame #3: 0x00007fff8fa9a865 CoreImage`-[CIOpenGLContextImpl _lockfeContext] + 25
frame #4: 0x00007fff8fa7e4ac CoreImage`-[CIContextImpl setObject:forKey:] + 120
frame #5: 0x00007fff8fa9881c CoreImage`-[CIOpenGLContextImpl setObject:forKey:] + 259
frame #6: 0x00007fff90db93e3 libCGXCoreImage.A.dylib`cgxcoreimage_instance_render + 1477
frame #7: 0x00007fff97074ac6 CoreGraphics`CGSCoreImageInstanceRender + 32
frame #8: 0x00007fff947c89cc libRIP.A.dylib`ripc_AcquireCoreImage + 1344
frame #9: 0x00007fff947b8a00 libRIP.A.dylib`ripc_DrawShading + 9680
frame #10: 0x00007fff96cb2b2b CoreGraphics`CGContextDrawShading + 51
frame #11: 0x00007fff8fa78237 CoreImage`-[CICGContextImpl render:] + 918
frame #12: 0x00007fff8fa7d76a CoreImage`-[CIContext drawImage:inRect:fromRect:] + 1855
frame #13: 0x00007fff9897b8f3 AppKit`-[CIImage(NSAppKitAdditions) drawInRect:fromRect:operation:fraction:] + 243

좀비, 가드 malloc 및 로그 예외가 모두 켜져 있는데 그 중 어느 것도 유용한 정보를 반환하지 않습니다.

기타 OpenGL 테스트:

이 청크를 추가했습니다.

CIImage *anImage  = [[CIImage alloc] init];
[[[self window] contentView] lockFocus];
{
    [anImage drawInRect: [[self window] frame]
               fromRect: [[self window] frame]
              operation: NSCompositeSourceOver
               fraction: 1];
}
[[[self window] contentView] unlockFocus];

~로 -windowDidLoad 나의 방법 NSWindowController.문제없이 실행됩니다.

이 청크를 추가했습니다.

NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString: @"http://cache.virtualtourist.com/14/684723-Red_Square_Moscow.jpg"]];

CIImage *anImage  = [[CIImage alloc] initWithData: data];
[self lockFocus];
{
    [anImage drawInRect: [self bounds]
               fromRect: [anImage extent]
              operation: NSCompositeSourceOver
               fraction: 1];
}
[self unlockFocus];

다른 사람에게 NSView'에스 -drawRect.나는 같은 오류를 받았습니다 CGLGetPixelFormat.

레이더:

#macdev에 있는 사람들은 이것이 OS 문제라고 믿는 것 같습니다. 저는 이에 동의할 생각이 없습니다.문제를 설명하고 이 질문에 다시 연결하는 레이더(rdar://11980704)를 제출했습니다.

해결 방법:

CGContextRef contextReference = [[NSGraphicsContext currentContext] graphicsPort];
CIContext *coreImageContext = [CIContext contextWithCGContext: contextReference
                                                      options: @{kCIContextUseSoftwareRenderer : @YES}];

[coreImageContext drawImage: outputCoreImage
                     inRect: [self bounds]
                   fromRect: originalBounds];

소프트웨어 렌더러를 사용하여 이미지를 강제로 그리면 문제가 "해결"되는 것처럼 보입니다.약간 흐릿하고 느리지만 충돌하지는 않습니다.

도움이 되었습니까?

해결책

10.8.1에서 해결됨

#macdev에 있는 사람들은 이것이 OS 문제라고 믿는 것 같습니다. 저는 이에 동의할 생각이 없습니다.문제를 설명하고 이 질문에 다시 연결하는 레이더(rdar://11980704)를 제출했습니다.

다른 팁

아마도 최초 실행 초기화 또는 검사를 수행하는 OpenGL 루틴을 앱에서 호출하는 것은 이번이 처음일 수 있습니다.

실험을 위해 앱 초기에 약간의 OpenGL 코드를 추가하고 충돌이 발생하는지 확인해보세요.OpenGL을 호출하면 왜 충돌이 발생할 수 있는지 생각해 보세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top