Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading NSOpenGLLayer与多线程_Multithreading_Cocoa_Opengl_Calayer - Fatal编程技术网

Multithreading 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

我用Cocoa编写了一个3D查看器。OpenGL渲染在创建自己的NSOpenGLContext的单独线程中执行

如果没有层处理,3D view drawRect方法在刷新时被调用,OpenGL线程进行刷新,所有事情都完美地工作

现在,我必须使用Cocoa层实现应用程序。创建三维NSView时,将创建NSOpenGLLayer的子类并将其附着到视图。方法

(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]