В моем проекте Metal Swift (iOS / MacOS) есть класс визуализации, который представляет собой MTKViewDelegate.Я извлекаю MTLDevice с помощью MTLCreateSystemDefaultDevice (), однако после init он становится равным nil?Интересно, я пропустил причуду Свифта или Металла здесь.Примерно так выглядит код:
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
с частотой 60 Гц на каждомвызов вызова
РЕДАКТИРОВАТЬ: отредактированный код, чтобы прояснить, что устройство фактически назначается переменной в глобальной области видимости (metalView).