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

标签 ios swift macos metal

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

相关文章:

swift - 在 CALayer 上使用自定义 CIFilter 显示 CALayer 没有变化

python-3.x - 导入错误 : No module named tkinter. Mac OS 终端

ios - 如何在 swift 4 中将 ASCII 码序列转换为字符串?

iphone - 应用程序在 xcode 中释放数组对象时崩溃

ios - tableViewCell 可以同时可移动并具有 .none 编辑风格的滑动操作吗

swift - ALCameraViewController,用于裁剪图像的库

css - OSX 上的 Firefox 错误计算 CSS calc

javascript - 设备上的 React Native dev 构建过期了吗?

ios - 如何在 Swift 中固定到 TableView 的顶部?

swift - 如何在 Swift 中创建通用枚举的实例