> For the complete documentation index, see [llms.txt](https://xiaobaiha.gitbook.io/tech-share/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xiaobaiha.gitbook.io/tech-share/ke-shi-hua/graphics-api.md).

# Graphics API

计算机图形程序接口是一套可编程的开放标准，3D/2D 都需要这部分底层的 API 支持。开发者只要输入很小的一段代码即可通过 API 来访问硬件，无论是效率还是质量都会得到极大的提升。Graphics API 本身是软件，并不是硬件，只是提前为你写好了调用硬件的代码，但是也有一些问题：

* 图形接口运行与操作系统中，大家所熟知的微软、苹果系统都发布了自己独有的 Graphics API，想要让自己开发的游戏运行在不同的操作系统，可能会需要不同的 API。
* 与之相反的还有跨平台图形程序接口，跨平台意味着不需要单独适配操作系统，开发一次即可发布到全平台。但跨平台并不能真正的完全优化在各个操作系统中的表现，最后是比较折中的。
* 还有高低层区别：高层开发成本越低、维护越难、权限越小；底层开发成本越高，维护越低，权限越大。

## OpenGL

OpenGL（全写 Open Graphics Library），定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维、二维图形，是一个功能强大，调用方便的底层图形库。OpenGL 是行业领域中最为广泛接纳的 2D/3D 图形 API，其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL 是个与硬件无关的软件接口，可以在不同的平台如 Windows、Unix、Linux、MacOS、OS/2 之间进行移植。因此，支持 OpenGL 的软件具有很好的移植性，可以获得非常广泛的应用。由于 OpenGL 是图形的底层图形库，没有提供几何实体图元，不能直接用以描述场景。

目前 OpenGL 已经停止了开发，将 OpenCL 一起合并后重点推广 Vulkan 接口，这是由同一家公司维护的图形接口，也可以说 Vulkan 将会是下一代跨平台图形接口标准。

苹果最近宣布公布放弃 OpenGL / OpenCL，推广自家的 Metal 图形接口，这就代表很多的三维软件、游戏等无法通过 OpenGL 等接口稳定的运行于 macOS 系统中，更有可能直接无法运行。想要更好的运行需要单独的适配 Metal 接口。

## OpenCL

OpenCL（全称 Open Computing Language，开放运算语言）是第一个跨平台系统通用的并行编程的开放式、免费标准，也是一个统一的编程环境，便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码，而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell 类型架构以及数字信号处理器(DSP)等其他并行处理器，在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

OpenCL 最初苹果公司开发，拥有其商标权，并在与 AMD，IBM，英特尔和 NVIDIA 技术团队的合作之下初步完善。随后，苹果将这一草案提交至 Khronos Group，最新的消息苹果放弃了 OpenCL 并停止了对其进行维护。

## VulKan

Vulkan 是 Khronos 组织制定的“下一代”开放的图形显示 API。是与 DirectX12 能够匹敌的 GPU API 标准。Vulkan 是基于 AMD 的 Mantle API 演化而来，Vulkan 提供了能直接控制和访问底层 GPU 的显示驱动抽象层。 显示驱动仅仅是对硬件薄薄的封装，这样能够显著提升操作 GPU 硬件的效率和性能。之前 OpenGL 的驱动层对开发人员隐藏的非常多细节，如今都暴露出来。Vulkan 甚至不包括执行期的错误检查层。驱动层干的事情少了，隐藏的 bug 也就少了。

Vulkan 不再使用 OpenGL 的状态机设计，内部也不保存全局状态变量。显示资源全然由应用层负责管理。包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。应用程序能够充分利用 CPU 的多核多线程的计算资源，降低 CPU 等待，降低延迟。 带来的问题是。线程间的同步问题也由应用程序负责，从而对开发人员的要求也更高。

## OpenGL ES

OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集，针对手机、PDA 和游戏主机等嵌入式设备而设计。该 API 由 Khronos 集团定义推广，Khronos 是一个图形软硬件行业协会，该协会主要关注图形和多媒体方面的开放标准。

OpenGL- ES 是免授权费的，跨平台的，功能完善的 2D 和 3D 图形应用程序接口 API，主要针对多种嵌入式系统专门设计 - 包括控制台、移动电话、手持设备、家电设备和汽车。它由精心定义的桌面 OpenGL 子集组成，创造了软件与图形加速间灵活强大的底层交互接口。 OpenGL ES 包含浮点运算和定点运算系统描述以及 EGL 针对便携设备的本地视窗系统规范。OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程 3D 图形算法。OpenGL ES-SC 专为有高安全性需求的特殊市场精心打造。

## WebGL

WebGL（全写 Web Graphics Library）是一种 3D 绘图协议，这种绘图技术标准允许把 JavaScript 和 OpenGL ES 2.0 结合在一起，通过增加 OpenGL ES 2.0 的一个 JavaScript 绑定，WebGL 可以为 HTML5 Canvas 提供硬件 3D 加速渲染，这样 Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示 3D 场景和模型了，还能创建复杂的导航和数据视觉化。显然，WebGL 技术标准免去了开发网页专用渲染插件的麻烦，可被用于创建具有复杂 3D 结构的网站页面，甚至可以用来设计 3D 网页游戏等等。

WebGL 完美地解决了现有的 Web 交互式三维动画的两个问题：1，它通过 HTML 脚本本身实现 Web 交互式三维动画的制作，无需任何浏览器插件支持。2，它利用底层的图形硬件加速功能进行的图形渲染，是通过统一的、标准的、跨平台的 OpenGL 接口实现的。

WebGL 标准已出现在 Mozilla Firefox、Apple Safari 及开发者预览版 Google Chrome 等浏览器中，这项技术支持 Web 开发人员借助系统显示芯片在浏览器中展示各种 3D 模型和场景，未来有望推出 3D 网页游戏及复杂 3D 结构的网站页面。

## DirectX

DirectX，（Direct eXtension，简称 DX）是由微软公司创建的多媒体编程接口。由 C++编程语言实现，遵循 COM。被广泛使用于 Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360 和 Microsoft XBOX ONE 电子游戏开发，并且只能支持这些平台。最新版本为 DirectX 12，创建在最新的 Windows10。

旨在使基于 Windows 的计算机成为运行和显示具有丰富多媒体元素（例如全色图形、视频、3D 动画和丰富音频）的应用程序的理想平台。DirectX 包括安全和性能更新程序，以及许多涵盖所有技术的新功能。但这不是跨平台的理想选择，只是针对 Windows 系统。

## Metal

在 WWDC 2014 上，Apple 为游戏开发者推出了新的平台技术 Metal，该技术能够为 3D 图像提高 10 倍的渲染性能，并支持大家熟悉的游戏引擎及公司。Metal 是一种低层次的渲染应用程序编程接口，提供了软件所需的最低层，保证软件可以运行在不同的图形芯片上。Metal 提升了苹果 A 系列处理器效能，让其性能完全发挥。

Metal 是一项全新的技术，专为开发高临场感主机游戏的开发者打造，可让开发者全力发挥芯片的性能。该技术经过优化，使处理器和图形处理器能够协同工作来实现最优性能。它专为多线程而设计，并提供各种出色工具将所有素材整合在 Xcode 中。虽然苹果一直强调 Metal 很强悍，但是依然与 DX 一样，这不是一个跨平台支持的 API，只针对 iOS、macOS 苹果自家的操作系统。

## WebGPU

WebGPU 产生的原因是由于 Web 应用对可编程 3D 图形，图像处理和 GPU 访问需求持续增强，WebGL 和 WebGL 2 满足这些需求，但与现代本机图形 API 的功能或性能不匹配并且在 Web 中引入 GPU 加速提升科学计算性能。WebGPU 是下一代 Web 的 3D 图形 API 标准，它有更低的驱动开销, 更好地支持多线程, 更可预测的性能并且能在所有主流的操作系统上支持 GPU 通用计算：

* Vulkan: Windows 7/8, Linux, Chrome OS, Android and Android WebView
* Metal: Mac, iOS
* Direct3D 12: Windows 10


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xiaobaiha.gitbook.io/tech-share/ke-shi-hua/graphics-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
