[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

相关文章
相关标签/搜索