Metal 是什么
Metal 是苹果的底层图形与计算 API,让你绕过一层又一层的封装,直接跟 GPU 对话。游戏、专业绘图、视频特效,凡是要榨干显卡性能的地方,背后多半是 Metal 在跑。
Metal 的价值在于:离 GPU 更近、开销更小、能精确控制每一帧怎么画。
这篇从概念到画一个三角形,把 Metal 入门讲清楚。
渲染管线
GPU 画画是一条固定管线:你把顶点数据送进去,顶点着色器决定它们落在哪,光栅化把三角形填成像素,片段着色器决定每个像素的颜色,最后写进帧缓冲。理解这条管线,就理解了图形渲染的骨架。
管线速查
- 顶点决定形状在哪。
- 光栅化把三角形填成像素。
- 片段着色器决定像素颜色。
设备与命令队列
使用 Metal 第一步是拿到 GPU 设备对象,再建一个命令队列。你把要做的绘制命令记进命令缓冲,再提交给队列,GPU 就按顺序执行。这个提交和执行是异步的,CPU 不停手地备命令,GPU 不停地画。
let device = MTLCreateSystemDefaultDevice()
let queue = device.makeCommandQueue()!
设备代表显卡,队列代表 GPU 的干活流水线。
着色器
着色器是跑在 GPU 上的小程序,用类 C 的 Metal 语言写。顶点着色器处理每个顶点,片段着色器处理每个像素。你在里面写公式:位置怎么变、颜色怎么算、光照怎么打。GPU 上成千上万个核心同时跑这些小程序。
一帧怎么画出来
每一帧:开命令缓冲、设渲染管线、绑定顶点缓冲、发绘制调用、提交。GPU 跑完,结果呈现到 CAMetalLayer 上,用户就看到画面。一秒重复六十次,就是流畅的动画。
- 准备好顶点数据。
- 编码绘制命令。
- 提交并呈现到屏幕。
为什么选 Metal
相比更高层的封装,Metal 把 CPU 提交开销压得很低,能同时做图形渲染和通用计算。物理模拟、图像处理、AI 推理,都能让 GPU 顺手干。要性能、要精确控制,就用 Metal。
实战:画一个三角形
入门目标:把三个顶点连成一个实心三角形画到屏幕上。
let vertices = [
Vertex(x: -0.5, y: -0.5),
Vertex(x: 0.5, y: -0.5),
Vertex(x: 0.0, y: 0.5)
]
// 绑定顶点缓冲,drawPrimitives 画出三角形
三个点、一条管线、一次提交,三角形就出现了。Metal 做到这份上,你已经站在了通往游戏与特效的入口。