我还没有深入了解 OpenGL,但据我了解,您可以使用 Quartz Extreme 使用图层支持的视图来完成子视图的视觉效果;但是,这些可能是有问题的。由于不直接支持子视图,因此任何解决方案都可能成为黑客攻击。
实际上,该链接中的解决方案实际上破解了第二个窗口以显示在您的 OpenGL 显示器上,第二个窗口显示您想要的 Cocoa 视图。
下面的代码(来自上面的链接)是我没有测试过的(再次不是天生的 OpenGL 人),但看起来是一个相当聪明的方法:
// This is the GL Window and view you already have
glWindow = [[GLWindow alloc] initWithContentRect:windowRect];
glView = [[[GLView alloc] initWithFrame:NSMakeRect(0, 0, windowRect.size.width, windowRect.size.height)] autorelease];
[glView translateOriginToPoint:NSMakePoint(glView.bounds.size.width/2, glView.bounds.size.height/2)];
[glWindow setContentView:glView];
// And here's your transparent UI window
uiWindow = [[TransparentWindow alloc] initWithContentRect:windowRect];
uiView = [[[NSView alloc] initWithFrame:NSMakeRect(0, 0, windowRect.size.width, windowRect.size.height)] autorelease];
[uiView translateOriginToPoint:NSMakePoint(uiView.bounds.size.width/2, uiView.bounds.size.height/2)];
uiView.wantsLayer = YES;
[uiWindow setContentView:uiView];
[glWindow addChildWindow:uiWindow ordered:NSWindowAbove];
同样,我没有对此进行测试,但看起来它会给你带来你想要的视觉效果。