苹果抛弃 OpenGL !

苹果意欲淘汰跨平台图形技术 OpenGL 和 OpenCL

日前的 WWDC 大会上,为了推广自家的 Metal 图形技术,苹果宣布了一个不太好的消息:随着 MacOS 10.14 Mojave 的发布,后续版本中将停用 OpenGL 和 OpenCL 接口——很多开发者对此十分不满,特别是游戏开发者,这两种跨平台图形技术的停用将会大大提高移植游戏的难度,甚至有部分游戏开发商扬言要“放弃 macOS 平台”。

在 MacOS 10.14 的文档中,苹果表示使用 OpenGL 和 OpenCL 构建的应用还可以继续在 macOS 10.14 中运行(但是即使 macOS 支持 OpenGL ,其内置版本依然是 8 年前发布的 OpenGL 3.3 ,而不是去年发布的 4.6)。

不过苹果表示,这些“遗留技术”并不推荐使用。所以,所有使用 OpenGL 的游戏和应用建议转向 Metal ;同样,使用 OpenCL 进行计算任务的应用也建议采用 Metal 和 Metal Performance Shaders 。

很明显,苹果此举是想要大力推广 Metal 图形技术,来替换掉“古老”的 OpenGL 接口和 OpenCL 接口。

苹果力推 Metal 究竟意欲何为?

在讨论这个问题之前,我们先讨论 OpenGL、OpenCL 和 Metal 三个技术。

OpenGL 是一个关于图形 API 的详述定义,规定了很多函数和其参数返回型,以及要实现的行为和管线操作。其具体的实现由硬件厂商完成。目前,OpenGL 是行业领域中最为广泛接纳的 2D/3D 图形 API。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。

OpenCL 是由苹果公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多 CPU、GPU、Cell 类型架构以及 DSP 等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

目前,OpenGL 和 OpenCL 接口都是游戏行业普遍应用的跨平台图形技术,特别是前者,十分受游戏开发商的欢迎。对开发商来说,OpenGL 不仅能够做到多平台通用,而且极大降低了多平台游戏开发的成本。

而 Metal,则是一种低层次的渲染应用程序编程接口,它是苹果公司 2014 年 WWDC 上为游戏开发者推出新的平台技术。Metal 提供了软件所需的最低层,能够为 3D 图像提高 10 倍的渲染性能,保证软件可以运行在不同的图形芯片上。目前,Metal 已支持了很多用户熟悉的游戏引擎及公司,比如《现代战争》、《狂野飙车》等等。

在 6 月 5 日的 WWDC 上,苹果推出了最新的 Metal 2 图形技术,并且鼓励所有开发者和开发商采用这个技术。但是这一技术的推广很可能是要以替换掉 OpenGL 接口和 OpenCL 接口为代价的。

但是,Metal 2 图形技术在多平台通用、成本方面明显都不如 OpenGL 有优势,那为什么苹果还要顶着被游戏开发厂商“抛弃”的风险力推呢?

事实上,对于苹果来说,OpenGL 和 OpenCL 图形技术的使用一直存在性能发挥不够好的问题,远不用充分利用 MacBook 等一系列电脑产品的硬件配置,但是 Metal 2 图形技术在这方面的性能提升却非常显著。

因此,苹果想要弃用 OpenCL 和 OpenGL 的意图十分明显。近几年,苹果一直在推动 Metal API 在 MacOS 和 iOS 上的应用,而 OpenGL Stack 多年来却一直没有更新,已严重落后于 Khronos Group 的 OpenGL 4.x 。由苹果公司开发且拥有商标权的 OpenCL 发展得也并非一帆风顺,随着 macOS 的弃用,现在已经很难看到 OpenCL 出现在桌面应用中了。

所以,虽然苹果目前还没有明确表示会删除实际的 OpenCL 和 OpenGL 驱动程序支持,但时间估计也不会太久了。

事实上,在图形技术领域,OpenGL、OpenCL 和 Metal 三者之间的关系一直是极其微妙的。随着 Vulkan(和 OpenGL 一样,同样由 Khronos 集团开发)、CUDA(NVIDIA 推出的通用并行计算架构)、DirectX(微软推出的多媒体编程接口)等市场角色的不断加入,正如@知乎用户(https://www.zhihu.com/question/279905495)所述,它们之间就无可避免地会有不断取代、消亡和进化的关系发生。

OpenGL 已停止更新,未来将由 Vulkan 接替。Vulkan 在 2015 年 GDC 上推出之初,就是旨在替代 OpenGL,以提高图形性能。

OpenCL 的未来也已经由 Khronos 作出决定,合并入 Vulkan。

macOS 官方支持的 OpenGL 最新版本只到4.1,在此之前很长一段时间停留在3.x。抛弃 OpenGL 早在预料之中。苹果的想法是依靠庞大的 iOS 设备和用户数反过来吸引 macOS 开发者(能不能成真另当别论)。另一个利好是抛弃 OpenGL 陈旧的历史负担,减少系统维护开发成本。

OpenCL 有点意思,因为它的原始创始者是苹果自己。对比 CUDA,OpenCL 开放跨平台的优势付出的代价是没有 NVIDIA 这类鼎力支持的厂商,开发调试过程极其复杂,生态圈也被 CUDA 远远抛开。苹果很长一段时间内倒是大力支持,还为此在 Mac 产品线上全线配备 AMD 图形卡,抛弃 NVIDIA(这是一个原因,最主要的是选择 AMD 成本更低,获得的主导权更大)。到 OpenCL 2.2发布时,Khronos决定未来将其与 Vulkan 融合。未来更新版本的、单独的 OpenCL 也将不复存在。

为什么不支持 Vulkan?自己一人说了算当然比一群人开会来的爽啊,问题是能不能做到像微软和 NVIDIA 那样自己爽大家也爽?难。

未来的标准,CUDA、DirectX、DirectCompute 没有主导权,Vulkan 不能自己说了算,Metal 当然被确立为自家官方未来的标准。

借由摒弃(OpenGL、CL)这几项标准这事,可以预测一下苹果未来工作站级别电脑会是什么情况——只能用于 macOS/iOS/tvOS 平台的 API,只支持此标准的操作系统,持观望和否定态度的广大开发者,大概率不支持此标准的 NVIDIA 等硬件厂商——没准下一代 Mac Pro 遭到的恶评比本代更多:圆柱体 Mac Pro 至少兼容性不是大问题。

所以,全平台兼容性终究是开发者们无法避开的问题了。

广大开发者,特别是游戏厂商该如何抉择?

那么苹果 Metal 2 图形技术的推出,会让广大开发者主动适配吗?面对跨平台移植和成本这两大因素,不同的厂商有不同的考量,以游戏厂商为例。

目前,其实已经有不少研发资源丰富的大厂商推出了基于 Metal 的 Mac 版游戏,包括耳熟能详的魔兽世界、杀出重围、见证者和尘埃拉力赛等。但这对于中小型厂商而言仍然是十分纠结的难题。

对于中小型游戏开发商来说,OpenGL 图形技术意味着多平台游戏开发成本的降低,而如果在 macOS 平台上单独采用 Metal 2 图形技术,则意味着开发成本会大幅上涨。“Mac 的市场份额实在太低了”、“维护 Metal 环境的成本明显高于 Mac 市场的潜力”、“把游戏转到 64 位并不困难(macOS 未来将不再支持 32 位应用),但是转到 Metal 是不可能的”......种种言论之下,厂商们会如何选择几乎一目了然了。

Vlambeer 公司的设计师 Rami 即表示:“Metal 和 DirectX 的问题非常相似,它们都不是跨平台的,我们不得不增加支持的图像引擎,某个平台独享的图形 API 令人感到痛苦。”

但是得益于 Windows 平台庞大的游戏用户数量,大部分游戏开发商都不会放弃 Windows 平台。然而 macOS 上的游戏用户数量远不如 Windows 等其他平台,所以在游戏开发产出比根本不合算的情况下,游戏开发者会放弃 macOS 平台也是不得已而为之的选择了。

写在最后

当年苹果与 Adobe 之间对于 iPhone 是否支持 Flash 的争论似乎已经过去很久了。当时,大家还对苹果的这一举动各执一词:有人认为Flash 是落后的技术应该淘汰,也有人认为苹果放弃高性能的Flash 是极为不明智的。

而现在,苹果又要移除 OpenGL 支持了。

无论开发者的态度是什么,是支持抑或是反对,苹果在其软硬件大一统的道路上都越走越远了,此次“舍弃”OpenGL 也只是其中的一小步而已。

而全平台兼容的难题,只能留给开发者们慢慢解决了。