Multithreading NSOpenGLLayer与多线程
我用Cocoa编写了一个3D查看器。OpenGL渲染在创建自己的NSOpenGLContext的单独线程中执行 如果没有层处理,3D view drawRect方法在刷新时被调用,OpenGL线程进行刷新,所有事情都完美地工作 现在,我必须使用Cocoa层实现应用程序。创建三维NSView时,将创建NSOpenGLLayer的子类并将其附着到视图。方法Multithreading NSOpenGLLayer与多线程,multithreading,cocoa,opengl,calayer,Multithreading,Cocoa,Opengl,Calayer,我用Cocoa编写了一个3D查看器。OpenGL渲染在创建自己的NSOpenGLContext的单独线程中执行 如果没有层处理,3D view drawRect方法在刷新时被调用,OpenGL线程进行刷新,所有事情都完美地工作 现在,我必须使用Cocoa层实现应用程序。创建三维NSView时,将创建NSOpenGLLayer的子类并将其附着到视图。方法 (void)drawInOpenGLContext:NSOpenGLContext *)ctx pixelForma
(void)drawInOpenGLContext:NSOpenGLContext *)ctx
pixelFormat:(NSOpenGLPixelFormat *)pixelFormat
forLayerTime:(CFTimeInterval)timeInterval
displayTime:(const CVTimeStamp *)timeStamp;
由Cocoa调用,但我无法使我的OpenGL线程渲染任何内容
我曾尝试在OpenGL线程中使用传递给DrawInPonglContext的OpenGL上下文,我曾尝试
[layer setOpenGLContext:ctx]
在OpenGL线程中使用在线程中创建的OpenGL上下文,依此类推,但没有任何效果。您记得在NSView上调用SetWantLayer吗?您可能需要从NSView调用它,使其成为以层为主体的视图。请参阅NSView SetWantLayer的文档
_testOglView = [[NSView alloc]initWithFrame:[self.view bounds]];
[_testOglView setLayer:[[TestOpenGLLayer alloc] init]];
[_testOglView setWantsLayer:YES];
[self.view addSubview:_testOglView];
在我的TestOpenGLLayer类中,我只需要定义DrawInPonglContext函数。我向其中添加了opeNGL命令,视图正确地渲染了图层。我不必调用[layer setContext]