gpt4 book ai didi

cocoa - 使用图层支持的 NSOpenGLView 会大幅减慢速度

转载 作者:行者123 更新时间:2023-12-03 17:25:36 33 4
gpt4 key购买 nike

我需要在现有应用程序中的 NSOpenGLView 之上显示一些 Cocoa 小部件。我按照 Apple 的 LayerBackedOpenGLView 示例代码中的示例进行操作。 NSOpenGLView 被赋予一个支持层:

[glView setWantsLayer:YES]

然后,带有小部件的 Cocoa NSView 将作为 glView 的 subview 添加。这基本上是有效的,并且比我之前的方法快两倍,我之前的方法是将包含小部件的 NSView 添加到包含 glView 的窗口的子窗口(这是我在网络上找到的另一个解决方案) .

有两个问题。

  • 首先是我在混合中使用的一些纹理不再能够正确混合。经过一番搜索后,我似乎需要清除 OpenGLView 的 Alpha channel 。我在绘制框架后调用的这段代码似乎解决了这个问题:

代码:

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 View 之上有一个 HUD(平视显示器) View 。我已经安装了另一个 NSView 作为 subview (如果有的话)。 HUD 和 subview 都有大量的 alpha 操作,并且由于某种原因,导致合成图层的速度真正减慢。我可以轻松地将此 subview 安装为 OpenGL View 的 subview ,当我这样做时,一切都会再次加快。因此,尽管我不完全理解减速的情况,但我确实有一个很好的解决办法。

关于cocoa - 使用图层支持的 NSOpenGLView 会大幅减慢速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039636/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com