使用Metal的第一件事, 就是要获取Metal的设备. 正如在OpenGL中, 需要首先获取到OpenGL的context.

为了便于调试, 我这里使用了Xcode的Playground, 操作系统是 OS X 10.13, Xcode版本是 10.0 Beta2.

最先需要引入Metal的Framework.

1
import Metal

1
var defaultDevice = MTLCreateSystemDefaultDevice()

如果系统上有多个GPU, 默认会获取到高性能的GPU.

我们定义一个函数来查看下设备的几个属性.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
func showDevice(device: MTLDevice) {
    print("----------我们要展示一个Metal了-----------")
    print("设备名称:      \t\(device.name)")
    print("是否是低性能:   \t\(device.isLowPower  ? "是" : "否" )")
    print("是否接显示器:   \t\(device.isHeadless  ? "否" : "是" )")
    print("设置是否可移除: \t\(device.isRemovable ? "是" : "否" )")
    print("设备注册ID:    \t\(device.registryID)")
}

showDevice(device: device)

调用完之后, 我的输出是:

———-我们要展示一个Metal了———– 设备名称: NVIDIA GeForce GT 750M 是否是低性能: 否 是否接显示器: 是 设置是否可移除: 否 设备注册ID: 4294968289

当然, 我们也可以获取到系统上所有的设备, 只需要调用 MTLCopyAllDevices .

1
2
3
4
5
6
7
// 当然我们也可以获取到所有的设备
let devices = MTLCopyAllDevices()

// 遍历所有设备
for device in devices {
    showDevice(device: device)
}

这次的输出是:

———-我们要展示一个Metal了———– 设备名称: Intel Iris Pro Graphics 是否是低性能: 是 是否接显示器: 是 设置是否可移除: 否 设备注册ID: 4294968295 ———-我们要展示一个Metal了———– 设备名称: NVIDIA GeForce GT 750M 是否是低性能: 否 是否接显示器: 是 设置是否可移除: 否 设备注册ID: 4294968289

同样源码托管在github: https://github.com/young40/LearnMetal . 欢迎star, 感谢!