我的 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/