2016-05-21 13 views
0

Ich habe ein Problem auf der GPUImage Github-Seite eingereicht, aber ich dachte, ich würde sehen, wenn jemand hier eine Umgehungsmöglichkeit oder eine bessere Vorstellung von der Ursache des Problems hat.GPUImageView hängt am presentFrameBuffer, wenn OpenGL Profiler angeschlossen

Ich habe eine GPUImageView von GPUImageRawDataInput in einer OS X-Anwendung gefüttert. Wenn ich OpenGL Profiler anschließe und die Verfolgung während der Aktualisierung aktiviere, wird die Verarbeitung in [NSOpenGLContext flushBuffer] (speziell in __psynch_mutexwait) blockiert. Für einen einfachen Testfall, ich habe nur einen View-Controller mit einem Knopf und benutzerdefinierter Ansicht der Klasse GPUImageView und den folgenden Code in der Steuerung:

-(void)awakeFromNib{ 
    [super awakeFromNib]; 
    NSString *fname = [[NSBundle mainBundle] pathForResource:@"TestImage" ofType:@"dat"]; 
    NSError *err = nil; 
    if(!fname){ 
     err = [NSError errorWithDomain:@"ViewController" code:0 
           userInfo:@{NSLocalizedFailureReasonErrorKey:@"No selected data file!"}]; 
    }else{ 
     _rawDataFromFile = [NSData dataWithContentsOfFile:fname 
                options:NSDataReadingMappedIfSafe | NSDataReadingUncached 
                error:&err]; 
    } 
    if(err){ 
     [self presentError:err]; 
     return; 
    } 
    [self.imageView setFillMode:kGPUImageFillModePreserveAspectRatio]; 
    [self.imageView setBackgroundColorRed:0.0 green:0.0 blue:0.0 alpha:1.0]; 
    GLubyte* data = (GLubyte *)[self.rawDataFromFile bytes]; 
    _inputFilter = [[GPUImageRawDataInput alloc] initWithBytes:data 
                  size:CGSizeMake(1024, 241) 
                pixelFormat:GPUPixelFormatLuminance 
                  type:GPUPixelTypeUByte]; 
    [self.inputFilter addTarget:self.imageView]; 
} 

- (IBAction)updateAction:(id)sender { 
    if (_inputFilter) { 
     [self.inputFilter useNextFrameForImageCapture]; 
     [self.inputFilter processData]; 
    } 
} 

Irgendwelche Ideen, warum dies nur hängen könnte, wenn der Profiler ist angebracht? Vielen Dank!

Ich bin auf einem Mitte 2012 Macbook Pro, OS X 10.11.4 ausgeführt.

Antwort

1

Ich habe gerade einen Fehler in meinem "einfachen" Testfall festgestellt, der mein Problem löst. Es zeigt eine mögliche Lösung für andere Probleme, die Leute mit GPUImage in OS X-Apps haben könnten, also poste ich es als eine Lösung hier.

Wenn Sie Interface Builder verwenden, um platzieren Sie Ihre GPUImageView innerhalb eines NSView, stellen Sie sicher, dass Sie drehen die Eltern nach Ansicht des Core Animation Layer aus, wenn Sie explizit es brauchen und wissen, was Sie tun (es ist standardmäßig aktiviert).

0

Ich habe gerade dieses Problem - nicht mit GPUImage, sondern nur versucht, meine App mit dem OpenGL Profiler zu verfolgen. Meine Lösung war, von der Verwendung einer Unterklasse von NSOpenGLView zu einer Unterklasse von NSView mit einer NSOpenGLLayer als Schicht zu wechseln. Nach dieser Änderung kann ich mit dem Profiler nachzeichnen, ohne zu hängen.