NSOpenGLView在macOS 10.9上删除其NSOpenGLContext

时间:2019-02-26 18:28:16

标签: macos nsopenglview

NSOpenGLView类具有读/写属性openGLContext,在阅读文档时,getter永远不应返回nil:

  

如果接收者没有关联的上下文对象,则会创建一个新的NSOpenGLContext对象。使用接收者的像素格式信息初始化新对象。

在macOS 10.13上,这似乎是正确的,但是在macOS 10.9上,将视图添加到窗口后它返回nil。也就是说,如果我这样做:

NSOpenGLView* glView = [[NSOpenGLView alloc]
    initWithFrame: NSMakeRect( 0.0, 0.0, 100.0, 100.0 )
    pixelFormat: [NSOpenGLView defaultPixelFormat]];
NSLog(@"Pixel format %@, context %@", glView.pixelFormat, glView.openGLContext );

[self.host addSubview: glView];
NSLog(@"Pixel format %@, context %@", glView.pixelFormat, glView.openGLContext );

然后在第二个日志中,上下文为nil。有没有解决办法?自己创建NSOpenGLContext并进行分配并没有帮助。我已经验证了主机视图是窗口的一部分,并且windowNumber是肯定的。

1 个答案:

答案 0 :(得分:0)

显然,在小牛中,必须设置上下文的视图以及设置视图的上下文。像这样的作品:

NSOpenGLPixelFormat* pf = [NSOpenGLView defaultPixelFormat];

NSOpenGLView* glView = [[[NSOpenGLView alloc]
    initWithFrame: NSMakeRect( 0.0, 0.0, 100.0, 100.0 )
    pixelFormat: pf] autorelease];

NSOpenGLContext* glc = [[[NSOpenGLContext alloc]
    initWithFormat: glView.pixelFormat shareContext: nil] autorelease];

[self.host addSubview: glView];

glc.view = glView; // the key step I was missing
glView.openGLContext = glc;
NSLog(@"Pixel format %@, context %@", glView.pixelFormat, glView.openGLContext );