本系列文章是對 metalkit.org 上面MetalKit內容的全面翻譯和學習.git
MetalKit系統文章目錄github
Metal 框架是在WWDC 2014 發佈了iOS版,在WWDC2015又發佈了OS X和tvOS版. Metal是一個爲計算機GPU編程的接口.主要優勢有:編程
GPU
訪問接入,所以它將減小其餘框架中因爲在CPU
和GPU
之間傳遞數據而常常引發的性能瓶頸.OpenGL
高達10倍的繪製調用.然而,Metal
並不能像OpenGL
同樣跨平臺,因此它並不能替代OpenGL
.compute
程序且性能等級至關於相似技術,如CUDA
和OpenCL
.由於Metal
不能用Xcode
模擬器運行,咱們沒法保證全部讀者都擁有A7或更新處理器的iOS
設備,因此咱們將建立一個OS X
項目來代替.在Xcode
中建立Cocoa Application
.在故事板中,拖放一個Label
到View Controller
中.居中,拉大,確保能顯示2行文本.添加必要約束.你的故事板看起來應該像這樣: swift
下一步,到ViewController.swift中爲剛纔的label建立一個IBOutlet
.你能夠全名爲label
或其餘你想要名字.最後,咱們來寫些代碼.你的類應該是這樣的:app
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var label: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
let devices = MTLCopyAllDevices()
guard let _ = devices.first else {
fatalError("Your GPU does not support Metal!")
}
label.stringValue = "Your system has the following GPU(s):\n"
for device in devices {
label.stringValue += "\(device.name!)\n"
}
}
}
複製代碼
讓咱們看一下上面的代碼.首先咱們須要import Metal
由於咱們調用了Metal
框架中的MTLCopyAllDevices() 函數.然而,由於Cocoa
已經導入了Metal
和AppKit
框架以便咱們使用NSViewController
這樣的類,因此咱們不須要另外再導入Metal
.框架
接着,在viewDidLoad() 中神奇的事情發生了.咱們經過調用MTLCopyAllDevices()
建立了一個Metal
設備,而後咱們簡單查詢它的名字並展現到label上.注意,MTLCopyAllDevices()
只適用於OS X
.對iOS/tvOS
設備應使用MTLCreateSystemDefaultDevice()
.一個device
是對GPU
的抽象,提供了一些方法和屬性,好比咱們上面用到的name
等.ide
運行項目,你將能看到下面的輸出:函數
GPU
"交談".我要感謝
@warrenm ,沒有他的引導和激勵這些教程將會是不存在的.在他的書
Metal by Example中, 你能夠找到大師高的質量的OC版Metal項目.本文代碼
source code已上傳至Github .
下次見!post