蘋果拋棄 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 也只是其中的一小步而已。

而全平臺兼容的難題,只能留給開發者們慢慢解決了。