[MetalKit]Introducing介紹Metal

本系列文章是對 http://metalkit.org 上面MetalKit內容的全面翻譯和學習.
目錄 http://www.lxweimin.com/p/64441ea99eba


Metal 框架是在WWDC 2014 發布了iOS版,在WWDC2015又發布了OS X和tvOS版. Metal是一個為計算機GPU編程的接口.主要優點有:

  • 提供最底層的GPU訪問接入,因此它將減少其他框架中由于在CPUGPU之間傳遞數據而經常引起的性能瓶頸.
  • 提供相比OpenGL高達10倍的繪制調用.然而,Metal并不能像OpenGL一樣跨平臺,所以它并不能替代OpenGL.
  • 允許運行compute程序且性能等級相當于類似技術,如CUDAOpenCL.
  • 擁有可定制的著色語言,允許著色器預編譯,這樣運行時可以更快.
  • 擁有內置的內存和資源管理,相比其他平臺.

因為Metal不能用Xcode模擬器運行,我們無法保證所有讀者都擁有A7或更新處理器的iOS設備,所以我們將創建一個OS X項目來代替.在Xcode中創建Cocoa Application.在故事板中,拖放一個LabelView Controller中.居中,拉大,確保能顯示2行文本.添加必要約束.你的故事板看起來應該像這樣:

chapter01_1.png

下一步,到ViewController.swift中為剛才的label創建一個IBOutlet.你可以全名為label或其他你想要名字.最后,我們來寫些代碼.你的類應該是這樣的:

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已經導入了MetalAppKit框架以便我們使用NSViewController這樣的類,所以我們不需要另外再導入Metal.

接著,在viewDidLoad()中神奇的事情發生了.我們通過調用MTLCopyAllDevices()創建了一個Metal設備,然后我們簡單查詢它的名字并展示到label上.注意,MTLCopyAllDevices()只適用于OS X.對iOS/tvOS設備應使用MTLCreateSystemDefaultDevice().一個device是對GPU的抽象,提供了一些方法和屬性,比如我們上面用到的name等.

運行項目,你將能看到下面的輸出:

chapter01_2.png

很簡單的東西,但是現在你已經學會了如何在盡可能底層的水平上同GPU"交談".我要感謝 @warrenm ,沒有他的引導和激勵這些教程將會是不存在的.在他的書Metal by Example中, 你可以找到大師高的質量的OC版Metal項目.本文代碼source code已上傳至Github .
下次見!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協議。它實...
    香橙柚子閱讀 24,124評論 8 183
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,253評論 4 61
  • 這是李婷365日寫作計劃第241天的寫作內容 這是第二對這本書寫讀書筆記,第一次讀來覺得作者說出了我的心里話,大部...
    婷婷玉立水墨畫閱讀 523評論 2 2
  • 新月上, 思情郎, 雪微漾, 心憂傷。 識君龍城校軍場, 別時雁歸都營帳。 棄女紅裝把劍揚, 征戰千里在身旁。 素...
    營州布衣閱讀 343評論 2 6
  • 今夕又于西安稍駐,憶前夕宿此,白雪翻飛,今又來歸,風雨兼程。感時光如電,一閃而過,春去夏至,再回首已是經年;...
    黃健歌閱讀 688評論 0 3