iOS SwiftUI框架之Metal是什么 如何用

一.什么是Metal ?

2014年,Apple为iOS引入了新的底层GPU编程框架:Metal。一年后,Metal进入了macOS,随后是watchOS和tvOS。苹果设备有两个可以进行编程以创建应用程序的“大脑”:

  • 中央处理器(CPU)
  • 图形处理单元(GPU)

GPU是执行浮点运算的专用处理器,它可以并行处理数学问题,非常快速和有效。但这些任务交给CPU却是非常昂贵的,因为它们无法并行完成。因此我们创建了各种框架和API来减轻CPU的负担。OpenGL是目前较为通用框架,Metal是苹果为了替代OpenGL推出的自家GPU编程框架。

二、 图形API的历史与OpenGL和Metal的诞生

三维计算机图形可以追溯到1960年代和1970年代。开拓者这样的工作
James Blinn和Edwin Catmull为当今的许多创新铺平了道路。但
直到1980年代的家庭计算机革命,计算机图形才开始普及。1980年代,编写跨平台软件非常困难,尤其是对于游戏而言。每个计算机和视频游戏系统都有其专有的硬件和软件。每次您想要在新设备上发布软件时,都必须编写
设备专用的驱动程序,软件和用户界面。这项工作是重复性的,在很大程度上
不必要。

1981年,Silicon Graphics(SGI)公司成立,它制造了高性能3D工作站。像所有其他3D工作站制造商一样,它拥有自己的专有3D图形API,称为IRIS GL。在1980年代的大部分时间里,它一直统治着市场。
1990年代,它的市场份额已经下降。在1992年,为了防止市场进一步侵蚀
共享,它打开了IRIS GL API,并将其重命名为OpenGL。
直到1997年,OpenGL才真正成为3D图形API。这家视频游戏公司由首席程序员约翰·卡马克(John Carmack)领导开发了其最畅销产品的后续产品
电子游戏《毁灭战士》。它被称为雷神之锤。每个游戏平台都渴望拥有Quake。如果他们不支持OpenGL,就无法将Quake移植到其平台上。制造商编译并编写了支持OpenGL的驱动程序。由于每个制造商都有完成了支持OpenGL的工作后,许多游戏开发人员开始独家支持OpenGL。因为他们知道它可以在每个平台上运行,也是行业标准就诞生了。

在2004年,OpenGL 2.0发布了。这是OpenGL的重大进步,因为它引入了OpenGL Shading语言。这种类似于C的语言允许程序员编写用于GPU的程序

2003年,发布了简化的OpenGL版本:OpenGL ES。 它删除了所有旧的、笨拙的实现方法,从而降低了能耗提供了兼容性。。在2007年,OpenGL ES 2.0已发布。此版本合并了着色器和可编程管线。也是在2007年,第一部iPhone发布了。图形框架和API第一个iOS SDK中提供的功能极其有限,但iPhone确实开始支持OpenGL ES。大多数想要为游戏和应用程序采用复杂图形的开发人员必须在OpenGL ES中对所有程序进行编程。

在2010年,Apple开始支持OpenGL ES 2.0,以及可编程着色器。多年来,Apple为iPhone上的图形开发了更高层次的抽象:Sprite工具包,场景工具包等。但是,如果您想直接对GPU进行编程,则必须使用OpenGL ES。您还必须为图形GPU编程。你不能利用GPU进行通用编程,也无法利用紧密Apple与其他框架的硬件/软件集成。

三、Metal 新使命

今天,我们在口袋里装着超级计算机。 iPhone正在接近计算我们许多笔记本电脑的功能。即使有所有这些额外的功能,我们仍然受到OpenGL API的限制。因为OpenGL必须容纳GPU的所有组合和变体和CPU,它永远无法充分利用Apple硬件资源。苹果公司确切知道它将用于GPU编程的芯片,并且可以优化框架以使其直接与该芯片的特性兼容。除了现在可以通过控制整个制造链实现的深度集成之外,OpenGL存在一些结构性问题,使它无法像它一样高效可能。因此Metal诞生了,Metal可以平衡CPU和GPU直接的工作负责,释放了更多的处理器带宽。Metal通过无需在CPU和GPU之间复制内存的方式,提高了这种CPU和GPU的利用效率。

推荐

基础文章推荐

  • 《SwiftUI是什么,听听大牛们如何说》

经典教程推荐

  • onevcat 大神的《SwiftUI 与 Combine 编程》
  • 更新近百篇SwiftUI教程《SwiftUI2020教程》
  • 帮您突破数据存储难关《SwiftUI vs CoreData数据存储解决方案》

技术源码推荐

推荐文章

CoreData篇

  • SwiftUI数据存储之做个笔记App 新增与查询(CoreData)
  • SwiftUI进阶之存储用户状态实现登录与登出
  • SwiftUI 数据之List显示Sqlite数据库内容(2020年教程)

Combine篇

  • 一篇文章学懂弄通SwiftUI与Combine(含轮播动画App源码)

TextField篇

  • 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
  • 《SwiftUI实战之TextField风格自定义与formatters》
  • 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
  • 《SwiftUI 当键盘出现时避免TextField被遮挡自动向上移动》
  • 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》

JSON文件篇

  • SwiftUI JSON文件下载、存储、解析和展示(代码大全)

一篇文章系列

  • SwiftUI一篇文章全面掌握List(教程和源码)
  • 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
  • SwiftUI一篇文章全面掌握Picker,解决数据选择(教程和源码)
  • SwiftUI一篇文章全面掌握Form(教程和源码)
  • SwiftUI Color 颜色一篇文章全解决

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

  • 请关注我的专栏icloudend, SwiftUI教程与源码
    https://www.jianshu.com/c/7b3e3b671970

你可能感兴趣的:(iOS SwiftUI框架之Metal是什么 如何用)