渲染 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、无绑定纹理,就是在给状态机"做减法")。实际选型通常由目标平台决定,其次才是性能与团队熟悉度。