I don't think it has anything to do with your windowing error, but your plugins may not be correctly installed, and it might be worth examining.
By default, "Backdrops.plugin" is a private API GFPlugin that Apple places in System/Library/Graphics/Quartz Composer Patches, and is loaded by Photo Booth (and maybe some other Apple apps?) On Jan 13, 2012, at 10:11 AM, Detour wrote: > Thoughts?? TIA. > > I've upgraded my machine to Lion a while ago and finally got around to > running some of my Xcode work, and ran across this issue trying to bring a > simple movie layer composition up full screen on a second monitor. I lock in > the monitor to black but no video shows. > > In the console: 2012-01-12 21:10:49.804 My App Name[84773:407] invalid > fullscreen drawable > > Plus a bunch of warning about plugins I am not using, but not important right > away? > > I had a warning with the NSOpenGLContext regarding setValues using the old > kCGLCPSwapInterval parameter, so I swappers that over to > NSOpenGLCPSwapInterval which removed the warning, but still I get a black > screen. The composition plays fine in QC, it is just a standard movie player > with billboard. > > At the tail end of the log I see this: > > 2012-01-12 21:10:50.216 The Media Device[84773:407] *** QCPlugIn: Bundle at > path "/Library/Graphics/Quartz Composer Plug-Ins/Backdrops.plugin" is not a > valid Quartz Composer plug-in > > Here's the code for setting up the QCRenderer: > > > > -(void)setupRenderer:(int)screenNumber { > CGDisplayErr err; > CGDirectDisplayID dspys [[[NSScreen screens] count]]; > CGDisplayCount dspyCnt; > > //Load composition file path > NSString *path = [[NSString alloc] initWithString:[[NSBundle > mainBundle] pathForResource:@"Test Video Player.qtz" ofType:nil]]; > [path retain]; > > err = CGGetOnlineDisplayList ([[NSScreen screens] count], dspys, > &dspyCnt); if (err != CGDisplayNoErr) { > NSLog(@"Cannot get display list"); > [NSApp terminate:nil]; > } > > CGDisplayCapture(dspys[screenNumber]); > _screenSize.width = CGDisplayPixelsWide(dspys[screenNumber]); > _screenSize.height = CGDisplayPixelsHigh(dspys[screenNumber]); > > GLint value = 1; > NSOpenGLPixelFormatAttribute attributes[] = { > NSOpenGLPFAFullScreen, > NSOpenGLPFAScreenMask, > CGDisplayIDToOpenGLDisplayMask(dspys[screenNumber]), > NSOpenGLPFANoRecovery, > NSOpenGLPFADoubleBuffer, > NSOpenGLPFAAccelerated, > NSOpenGLPFADepthSize, 24, > (NSOpenGLPixelFormatAttribute) 0 > }; > NSOpenGLPixelFormat* format = [[[NSOpenGLPixelFormat alloc] > initWithAttributes:attributes] autorelease]; > > > //Create the fullscreen OpenGL context on the main screen > (double-buffered with color and depth buffers) > _openGLContext = [[NSOpenGLContext alloc] initWithFormat:format > shareContext:nil]; > if(_openGLContext == nil) { > NSLog(@"Cannot create OpenGL context"); > [NSApp terminate:nil]; > } > [_openGLContext setFullScreen]; > [_openGLContext setValues:&value forParameter:NSOpenGLCPSwapInterval]; > > //Create the QuartzComposer Renderer with that OpenGL context and the > specified composition file > _renderer = [[QCRenderer alloc] initWithOpenGLContext:_openGLContext > pixelFormat:format file:path]; > if(_renderer == nil) { > NSLog(@"Cannot create QCRenderer"); > [NSApp terminate:nil]; > } > > //Create a timer which will regularly call our rendering method > _renderTimer = [[NSTimer scheduledTimerWithTimeInterval:(1.0 / > (NSTimeInterval)kRendererFPS) target:self selector:@selector(_render:) > userInfo:nil repeats:YES] retain]; > > > } > > - (void) renderWithEvent:(NSEvent*)event > { > NSTimeInterval time = [NSDate > timeIntervalSinceReferenceDate]; > NSPoint mouseLocation; > NSMutableDictionary* arguments; > > //Let's compute our local time > if(_startTime == 0) { > _startTime = time; > time = 0; > } > else > time -= _startTime; > > //We setup the arguments to pass to the composition (normalized mouse > coordinates and an optional event) > mouseLocation = [NSEvent mouseLocation]; > mouseLocation.x /= _screenSize.width; > mouseLocation.y /= _screenSize.height; > arguments = [NSMutableDictionary dictionaryWithObject:[NSValue > valueWithPoint:mouseLocation] forKey:QCRendererMouseLocationKey]; > if(event) > [arguments setObject:event forKey:QCRendererEventKey]; > > //Render a frame > if(![_renderer renderAtTime:time arguments:arguments]) > NSLog(@"Rendering failed at time %.3fs", time); > > //Flush the OpenGL context to display the frame on screen > [_openGLContext flushBuffer]; > } > > - (void) _render:(NSTimer*)timer > { > //Simply call our rendering method, passing no event to the composition > [self renderWithEvent:nil]; > } > > - (void) sendEvent:(NSEvent*)event > { > //If the user pressed the [Esc] key, we need to exit > if(([event type] == NSKeyDown) && ([event keyCode] == 0x35)) > [NSApp terminate:nil]; > > //If the renderer is active and we have a meaningful event, render > immediately passing that event to the composition > if(_renderer && (NSEventMaskFromType([event type]) & > kRendererEventMask)) > [self renderWithEvent:event]; > //else > // [super sendEvent:event]; > } > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/quartzcomposer-dev/gtoledo3%40gmail.com > > This email sent to gtole...@gmail.com
_______________________________________________ Do not post admin requests to the list. They will be ignored. Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com