gpt4 book ai didi

ios - 如何有效地合成 Quartz 和 OpenGL/Metal 绘图?

转载 作者:行者123 更新时间:2023-12-01 16:34:45 24 4
gpt4 key购买 nike

我有一款游戏需要一些高级绘图结构,例如复杂的贝塞尔曲线和填充(随每一帧而变化),我想用 OpenGL 或 Metal 绘制的一些更原始的东西进行合成/叠加。是否有一种有效(高性能)的方式来做到这一点?

  1. 我可以简单地在 OpenGL 层上添加一个 quartz 绘图层吗?否则这会严重影响性能吗?
  2. 我应该将我的 Quartz 绘图捕获到位图并将其作为纹理推送到 OpenGL 中吗?或者在每一帧上都执行此操作会慢得令人望而却步吗?
  3. 我可以换一种方式,将我的 OpenGL 渲染捕获到我用 Quartz 绘制的位图中吗?

最佳答案

我能够在 opengl View 之上覆盖 quartz View ,而不会(看起来)对性能造成太大影响。我实际上无法弄清楚如何在 Interface Builder 中执行此操作,但通过简单地创建一个“主” View Controller 并按程序将两个 View 添加为 subview ,在代码中就足够简单了,如下所示:

let glkViewController = GLKViewController()
self.view.addSubview( glkViewController!.view )

let overlayView = OverlayView()
overlayView.opaque = false
overlayView.frame = self.view.frame
let overlayViewController = OverlayViewController()
overlayViewController.view = overlayView
self.view.addSubview(overlayView)
overlayViewController.viewDidLoad()

请注意,glk View 有它自己的刷新循环,并且上面假设您在 viewDidLoad() 中为您的 quartz View Controller 设置了 CADisplayLink 或其他运行循环。两者之间不需要调用/刷新。 glk View 似乎在默认 NSRunLoop.currentRunLoop() 上刷新,因此如果您使用它,它们将争夺时间,而且如果事情变得紧张,opengl 循环似乎会获胜。您可以轻松地为叠加层创建单独的循环或后台线程以将它们分开。

关于ios - 如何有效地合成 Quartz 和 OpenGL/Metal 绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29258647/

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