iOS-FFmpeg音视频开发OpenGL+MetalMetal专辑

Metal入门资料001-Metal framework介绍

2018-06-05  本文已影响73人  张芳涛

写在前面:

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

Metal framework介绍

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

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

效果图:

这个也必须用真机测试
上一篇下一篇

猜你喜欢

热点阅读