gpt4 book ai didi

ios - Metal Device (MTLDevice) 变量在初始化后变为 nil

转载 作者:行者123 更新时间:2023-11-28 13:27:37 30 4
gpt4 key购买 nike

我的 Metal Swift (iOS/MacOS) 项目中有一个渲染器类,它是一个 MTKViewDelegate。我使用 MTLCreateSystemDefaultDevice() 提取了 MTLDevice,但是在初始化之后,它变成了 nil?我想知道我是否在这里错过了 Swift 或 Metal 的一个怪癖。代码大致是这样的,

class Renderer: NSObject, MTKViewDelegate {

var device: MTLDevice!

init(metalView: MTKView) {
guard let device = MTLCreateSystemDefaultDevice() else
{
fatalError("GPU not available")
}
​ metalView.device = device
if device != nil {
print (“device not nil”)
}
}

func draw(in view: MTKView) {
if device == nil {
print (“device is nil here”)
}
}
}

在我的 ViewController 中我这样做

guard let metalView = view as? MTKView else {
fatalError("Metal View not setup")
}
renderer = Renderer(metalView: metalView)

我看到的是:

device not nil
device is nil here
device is nil here
device is nil here
device is nil here

在每次绘制调用时都是 60hz

编辑:编辑代码以明确设备实际上正在分配给全局范围 (metalView) 中的变量。

最佳答案

根据您的代码,您没有将本地设备分配给隐式展开的全局设备变量。将本地设备分配给全局设备以解决问题。

guard let device = MTLCreateSystemDefaultDevice() else
{
fatalError("GPU not available")
}
self.device = device

关于ios - Metal Device (MTLDevice) 变量在初始化后变为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58104065/

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