[MetalKit]1-Introducing介紹Metal

本系列文章是對 metalkit.org 上面MetalKit內容的全面翻譯和學習.git

MetalKit系統文章目錄github


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行文本.添加必要約束.你的故事板看起來應該像這樣: swift

chapter01_1.png

下一步,到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已經導入了MetalAppKit框架以便咱們使用NSViewController這樣的類,因此咱們不須要另外再導入Metal.框架

接着,在viewDidLoad() 中神奇的事情發生了.咱們經過調用MTLCopyAllDevices()建立了一個Metal設備,而後咱們簡單查詢它的名字並展現到label上.注意,MTLCopyAllDevices()只適用於OS X.對iOS/tvOS設備應使用MTLCreateSystemDefaultDevice().一個device是對GPU的抽象,提供了一些方法和屬性,好比咱們上面用到的name等.ide

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

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

下次見!post

相關文章
相關標籤/搜索