此行
commandQueue = device.makeCommandQueue()
给出运行时错误
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
import UIKit
import MetalKit
enum Colors{
static let ClearColor = MTLClearColor(red: 0.0,
green: 0.21,
blue: 0.4,
alpha: 1.0)
}
class ViewController: UIViewController {
var metalView: MTKView{
return view as! MTKView
}
var device: MTLDevice!
var commandQueue: MTLCommandQueue!
override func viewDidLoad() {
super.viewDidLoad()
metalView.device = MTLCreateSystemDefaultDevice()
device = metalView.device
metalView.clearColor = Colors.ClearColor
commandQueue = device.makeCommandQueue()
let commandBuffer = commandQueue.makeCommandBuffer()
let commandEncoder =
commandBuffer?.makeRenderCommandEncoder(descriptor: metalView.currentRenderPassDescriptor!)
commandEncoder?.endEncoding()
commandBuffer?.present(metalView.currentDrawable!)
commandBuffer?.commit()
}
}
答案 0 :(得分:0)
从您留下的评论来看,您正在尝试使用iOS模拟器在macOS上运行使用Metal的iOS应用程序。
不幸的是,即使macOS支持Metal,但在iOS模拟器下运行Metal也不支持。
由于不支持Metal,因此MTLCreateSystemDefaultDevice
返回nil
,这将导致您提到的错误。
如果您希望代码同时在macOS和iOS上运行,则需要编写应用程序,使其跨平台。如果它是一个仅在屏幕上呈现内容的应用程序,而没有像游戏一样的大量UI,则它应该非常简单,因为Xcode为使用Metal的跨平台项目提供了模板。