渲染 API(rendering API,也称图形 API)是应用程序和 GPU 之间的接口层:应用把顶点、纹理、着色器这些数据,连同"画什么、怎么画"的命令交给它,由它翻译成 GPU 能执行的指令。目前主流的渲染 API 有 OpenGL、Vulkan、DirectX(Direct3D)、Metal。
它们驱动的渲染管线大同小异——都要经过顶点处理、图元装配、光栅化、片元着色这些阶段。真正的差异在抽象程度上,由此可以排成一条从"高层、帮你做很多事"到"低层、把控制权交给你"的谱系:
- 高层 API:帮你管理全局状态、内存与同步,调用简单,但驱动可优化的空间小、开销难控。代表:OpenGL、Direct3D 11。
- 低层 API:只提供最小抽象,显式管理资源、命令缓冲与同步,性能上限高、开销可控,但代码量大。代表:Vulkan、Direct3D 12、Metal。
OpenGL
跨平台(Windows / Linux / macOS,移动端为 OpenGL ES),历史最悠久,核心设计是一个状态机:先设置一堆全局状态(绑定哪个缓冲、哪个着色器),再提交绘制命令,命令按"当前状态"执行。
- 优点:易上手、资料多、跨平台。
- 缺点:全局状态带来隐式耦合;单线程提交命令,驱动要做大量猜测与校验,CPU 开销偏高;新旧接口并存,版本割裂。
Vulkan
Khronos 推出的显式(explicit)低层 API,跨平台。几乎一切都要亲自管理:显存分配、命令缓冲录制、管线状态对象、同步原语(fence / semaphore)。
- 优点:支持多线程录制命令,驱动开销极低,状态切换成本可预测,性能上限高。
- 缺点:样板代码极多(画一个三角形也要上千行),开发成本高,需要理解显存与同步等底层概念。
DirectX(Direct3D)
微软的图形 API,只支持 Windows / Xbox,分两代:
- Direct3D 11:高层,类似 OpenGL 的状态机模型,开发舒适。
- Direct3D 12:低层,思路与 Vulkan 类似(命令列表、显式资源管理)。
优点是与 Windows 生态深度集成、工具链成熟;缺点是平台锁定。
Metal
苹果为 iOS / macOS 推出的低层 API,设计比 Vulkan 更简洁:把 Vulkan 里许多细碎对象合并成少数几个高层对象,同时保留显式命令缓冲与低开销。
- 优点:低开销、上手比 Vulkan 友好,是苹果平台的最优解。
- 缺点:仅限苹果生态。
如何选择
| API | 平台 | 抽象层次 | 一句话定位 |
|---|---|---|---|
| OpenGL | 跨平台 | 高 | 易学、生态老,新项目逐步被替代 |
| Vulkan | 跨平台 | 低 | 显式控制、性能极致、成本高 |
| Direct3D 11 | Windows / Xbox | 高 | 微软生态的"舒适区" |
| Direct3D 12 | Windows / Xbox | 低 | 微软生态的高性能选择 |
| Metal | Apple | 低(更简洁) | 苹果平台唯一的最优解 |
注:抽象层次是相对概念,同一 API 也在不断演变(如 OpenGL 的 DSA、无绑定纹理,就是在给状态机"做减法")。实际选型通常由目标平台决定,其次才是性能与团队熟悉度。


