美文网首页iOS-FFmpeg音视频开发OpenGL+MetalMetal专辑
Metal入门资料001-Metal framework介绍

Metal入门资料001-Metal framework介绍

作者: 张芳涛 | 来源:发表于2018-06-05 18:07 被阅读73次

    写在前面:

    对Metal技术感兴趣的同学,可以关注我的专题:Metal专辑
    也可以关注我个人的简书账号:张芳涛
    所有的代码存储的Github地址是:Metal

    Metal framework介绍

    WWDC 2014 iOS和WWDC 2015上发布的Metal framework也适用于OS XtvOSMetal是用于编程计算机中图形处理单元(GPU)的界面。 使用Metal的主要优点如下:

    • 提供对GPU最低的访问开销,因此可以减少通常由其他框架中的CPUGPU之间的数据传输所导致的性能方面的瓶颈。

    • OpenGL相比,提供最多10倍的绘制调用次数(性能更强悍)。 然而,Metal不像OpenGL那样是跨平台的,所以它不能代替OpenGL

    • 还允许运行具有与CUDAOpenCL等类似技术相媲美的性能水平的计算应用程序。

    • 有一个自定义着色器语言(shader language),允许着色器预编译,以便在运行时更快速。

    • 具有专门针对这些平台的内置内存和资源管理。

    MAC电脑客户端相关技术实现

    Metal是不允许在模拟器上运行的,而且即使在真机上也需要真机设备的芯片是A7以后的CPU芯片。所以这里用的是电脑的程序来演示(不过,因为我也是边翻译,边学习,所以,我会在后面给大家提供手机的相关代码的,这一点请大家放心)。

    接下来,转到ViewController.swift并为我们刚刚创建的标签创建一个IBOutletOSX平台下面的演示代码如下:

    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"
        }
       }
     }
    

    我们来看看上面的代码。 首先,我们需要导入Metal,因为我们调用属于Metal框架的MTLCopyAllDevices()函数。 但是,由于Cocoa已经导入了MetalAppKit框架,它允许我们使用NSViewController类,所以我们不需要为Metal添加另一条导入线。

    然后,在viewDidLoad()内部就是所有功能发生的地方。 我们通过调用MTLCopyAllDevices()来创建一个Metal设备,然后我们简单地查询它的名称,以便我们可以将它显示为标签文本。 请注意,MTLCopyAllDevices()仅在OS X中可用。对于iOS / tvOS设备,请使用MTLCreateSystemDefaultDevice()。 设备是GPU的抽象,为我们提供了一些方法和属性,例如上面使用的名称。

    如果您运行该项目,您应该能够看到以下输出:

    iOS设备相关技术实现

    上面是在OSX平台下面的相关代码,下面介绍在iOS系统下面相关效果的实现:

    iOS设备上的先关代码实现如下:

    import UIKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var label: UILabel!
        override func viewDidLoad() {
        super.viewDidLoad()
        guard  let device = MTLCreateSystemDefaultDevice() else {
            fatalError("Your GPU does not support Metal!")
        }
        label.text = "Your system has the following GPU(s):\n" + "\(device.name)\n"
    }
    

    }

    下面是执行的结果:


    一定要用真机测试

    *iOS平台相关代码:Ch01-iOS

    TVOS相关技术实现

    下面是TvOS平台下面的实现:

    实现代码:

    import UIKit
    
    class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        guard  let device = MTLCreateSystemDefaultDevice() else {
            fatalError("Your GPU does not support Metal!")
        }
        label.text = "Your system has the following GPU(s):\n" + "\(device.name)\n"
     }
    }
    

    效果图:

    这个也必须用真机测试

    相关文章

      网友评论

        本文标题:Metal入门资料001-Metal framework介绍

        本文链接:https://www.haomeiwen.com/subject/lckmsftx.html