Metal iOS 给出编译错误
Metal iOS gives compile error
import UIKit
import Metal
import QuartzCore
class ViewController: UIViewController {
var device: MTLDevice! = nil
var metalLayer: CAMetalLayer! = nil
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
device = MTLCreateSystemDefaultDevice()
metalLayer = CAMetalLayer() // 1
metalLayer.device = device // 2
metalLayer.pixelFormat = .BGRA8Unorm // 3
metalLayer.framebufferOnly = true // 4
metalLayer.frame = view.layer.frame // 5
view.layer.addSublayer(metalLayer) // 6
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
当我的 ViewController.swift 中有这个时,即使我已经导入了 Metal 和 QuartzCore,我也会收到错误 "Use of undeclared type CAMetalLayer
"。我怎样才能让这段代码起作用?
更新:
Simulator support is coming this year (2019)
前Xcode11/iOS13:
Metal 代码无法在模拟器上编译。尝试为设备编译。
如果您的应用有一个不依赖于 Metal 的回退或模式,并且您想为模拟器编译您的应用,您可以这样做:
#if targetEnvironment(simulator)
// dummy, do-nothing view controller for simulator
class ViewController: UIViewController {
}
#else
class ViewController: UIViewController {
var device: MTLDevice! = nil
var metalLayer: CAMetalLayer! = nil
override func viewDidLoad() {
super.viewDidLoad()
device = MTLCreateSystemDefaultDevice()
metalLayer = CAMetalLayer()
...
}
}
#endif
那么你的代码至少会为设备和模拟器编译,这可以简化你的非金属开发。
如果将 XCode 项目命名为 "Metal",可能会出现同样的问题。
在那种情况下,编译器会感到困惑,您会收到相同的错误消息。
import UIKit
import Metal
import QuartzCore
class ViewController: UIViewController {
var device: MTLDevice! = nil
var metalLayer: CAMetalLayer! = nil
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
device = MTLCreateSystemDefaultDevice()
metalLayer = CAMetalLayer() // 1
metalLayer.device = device // 2
metalLayer.pixelFormat = .BGRA8Unorm // 3
metalLayer.framebufferOnly = true // 4
metalLayer.frame = view.layer.frame // 5
view.layer.addSublayer(metalLayer) // 6
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
当我的 ViewController.swift 中有这个时,即使我已经导入了 Metal 和 QuartzCore,我也会收到错误 "Use of undeclared type CAMetalLayer
"。我怎样才能让这段代码起作用?
更新:
Simulator support is coming this year (2019)
前Xcode11/iOS13:
Metal 代码无法在模拟器上编译。尝试为设备编译。
如果您的应用有一个不依赖于 Metal 的回退或模式,并且您想为模拟器编译您的应用,您可以这样做:
#if targetEnvironment(simulator)
// dummy, do-nothing view controller for simulator
class ViewController: UIViewController {
}
#else
class ViewController: UIViewController {
var device: MTLDevice! = nil
var metalLayer: CAMetalLayer! = nil
override func viewDidLoad() {
super.viewDidLoad()
device = MTLCreateSystemDefaultDevice()
metalLayer = CAMetalLayer()
...
}
}
#endif
那么你的代码至少会为设备和模拟器编译,这可以简化你的非金属开发。
如果将 XCode 项目命名为 "Metal",可能会出现同样的问题。
在那种情况下,编译器会感到困惑,您会收到相同的错误消息。