我有两个 NSOpenGLView,分别命名为 myView1 和 myView2。myView2 是 myView1 的子视图。然后我使用CVDisplayLinkCreateWithCGDisplay为主显示创建显示链接。myView1 和 myView2 都将使用 OpenGL 在主线程中(即在drawRect函数中)绘制一些东西。在显示链接回调中,我还将使用 OpenGL 为 myView1 绘制一些东西。
绘图代码类似于
[self.openGLContext makeCurrentContext];
[self.openGLContext lock];
//draw something ...
[self.openGLContext flushBuffer];
[self.openGLContext unlock];
目前一切正常。但是如果我为 myView1 和 myView2 添加以下代码,它很容易陷入挂起。
[self setWantsLayer:YES];
调用堆栈在这里:在此处输入图像描述
似乎主线程和显示链接回调都锁定在 [NSOpenGLContext flushBuffer] 中。有谁知道如何解决这个问题?