我需要在现有应用程序的NSOpenGLView上显示一些Cocoa小部件。我按照Apple的LayerBackedOpenGLView
示例代码中的示例进行了操作。使用以下内容为NSOpenGLView
提供了支持层:
[glView setWantsLayer:YES]
然后将带有小部件的Cocoa NSView
添加为glView
的子视图。这基本上是有效的,并且是我之前的方法的两倍,我将包含小部件的NSView
添加到包含glView的窗口的子窗口(这是我在网络上找到的另一个解决方案)。
有两个问题。
OpenGLView
的alpha通道。我在绘制框架后调用的这段代码似乎解决了这个问题:代码:
glColorMask(FALSE, FALSE, FALSE, TRUE); //This ensures that only alpha will be effected
glClearColor(0, 0, 0, 1); //alphaValue - Value to which you need to clear
glClear(GL_COLOR_BUFFER_BIT);
glColorMask(TRUE, TRUE, TRUE, TRUE); //Put color mask back to what it was.
有人可以解释为什么在使用CALayer
时需要这样做,但不是没有?
有什么想法吗?
答案 0 :(得分:0)
我确实找到了减速的解决方法。 OpenGL视图有一个HUD(抬头显示)视图。我已经安装了另一个NSView作为子视图。 HUD和子视图都有很多alpha操作,并且由于某种原因,在合成图层时发生了真正的减速。我可以轻松地将这个子视图安装为OpenGL视图的子视图,当我这样做时,一切都再次加速。因此,虽然我并不完全了解减速,但我确实有很好的解决方法。