我需要在现有应用程序的NSOpenGLView上显示一些可可小部件。我按照Apple的LayerBackedOpenGLView
示例代码中的示例进行操作。使用以下内容为NSOpenGLView
提供支持层:
[glView setWantsLayer:YES]
然后将带有小部件的可可
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
时需要这样做吗?我没有解决的第二个问题。看来,当我平移到发现问题#1的场景部分时,帧速率从110 FPS下降到10 FPS。再说一次,这只是在我添加了底层之后才开始发生。这并非总是会发生。有时在平移场景的这一部分时FPS会保持较高水平,但这很少见。我认为它必须具有如何混合这里的纹理的功能,但是我不知道该怎么做。
有什么想法吗?
最佳答案
我确实找到了解决该变慢的方法。 OpenGL视图在其顶部具有HUD(抬头显示)视图。我已经安装了另一个NSView作为子视图。 HUD和子视图都具有大量的Alpha操作,并且由于某种原因在合成图层时引起了真正的减慢。我可以很容易地将该子视图安装为OpenGL视图的子视图,当我这样做时,一切又加速了。因此,尽管我不完全了解减速,但确实可以解决这一问题。
关于cocoa - 使用层支持的NSOpenGLView的速度急剧下降,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6039636/