ericltw / notes

0 stars 1 forks source link

OpenGL, OpenGL ES, DirectX, Vulkan #16

Open ericltw opened 6 years ago

ericltw commented 6 years ago

The CPU, the GPU, and OpenGL

The central processing unit on your computer can do just about anything. But even the craziest computer' CUPs only have about eight cores these days which isn't enough to render a complex scene in the real time. Fortunately, your computer and phone also have say, graphics processing unit, or GPU. GPUs are chips purpose built to pump out pixels, and some can have thousands of cores. Each of these core is pretty limited in what it can do, though, and groups of these cores have to work together in a lock step, each executing the same instructions each clock cycle. So while the GPU is less flexible that a CPU, it can spew out pixels at some absurd rate. So the code we run on the CPU determines what we what to draw. And then we send those instructions over to the GPU which will actually figure out the pixel colors. To do this we need a language for communicating between the CPU and the GPU. The most common language for this purpose is called the Open Graphics Language or OpenGL.

OpenGL

In wiki:

Open Graphics Library (OpenGL) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics.

在wiki說是API,這會讓人產生誤解。API實際上有兩層含義,一層是指定義,二層是指實現。JAVA中有個API叫作String.length(),使用Java調用這個API能返回String長度,這裡的這個JAVA API是指實現了這個API接口。JAVA語言的規範只有一份,The Java® Language Specification,實現可以有很多種,比如sun公司的jdk和openjdk。

回到OpenGL是API這句話,說的是第一層含義,他定義了一組接口,不包含實現。這裡有OpenGL的規範定義

OpenGL為什麼出現?為了統一。在規範出來之前,各大顯卡場各搞各的,AMD, Intel, Nvidia, SGI,每個廠商依套自己的API,而且經常更新,使得應用開發者無法使用同一個API完成相同功能,後來SGI提出依套規範叫OpenGL,定義統一的API,各廠家實現,開發者調用統一的API。現在OpenGL是Khronos Group在維護。

OpenGL ES

OpenGL ES和OpenGL一樣,是Khronos Group在維護、定義的免授權、跨平台的3D Graphics API,不過和OpenGL不同的是,OpenGL ES 主要是針對嵌入式系統(embedded system)的環境(像是手機、PDA);而近年來網頁上的多媒體技術越來越複雜、多樣化,也漸漸地需要用到 3D Graphics 的硬體加速,所以也出現了基於 OpenGL ES 2.0 而發展、直接在網頁上做 3D 顯示的 WebGL

也由於 OpenGL ES 所針對的環境一般來說效能都較差、有支援的功能也較少,所以OpenGL ES 的技術方面的進展會比 OpenGL 來的慢、而且也有較多的限制。

DirectX

DirectX和OpenGL有著一樣的目的,是由微軟建立的一系列專為多媒體以及遊戲開發的應用程式介面。旗下包含Direct3DDirect2DDirectCompute等等多個不同用途的子部份,因為這一系列API皆以Direct字樣開頭,所以DirectX。

DirectX被廣泛用於Microsoft Windows、Microsoft Xbox電子遊戲開發,並且只能支援這些平台。除了遊戲開發之外,DirectX亦被用於開發許多虛擬三維圖形相關軟體。Direct3D是DirectX中最廣為應用的子模塊,所以有時候這兩個名詞可以互相代稱。

Vulkan

Vilkan最早事由Khronos Group在2015年的遊戲開發者大會(GDC)上提出來的,這是底層跨平台的3D圖像及運算應用程序接口(API),最初被稱為“次世代OpenGL方案”(next generation OpenGL initiative)。

Vulkan針對高性能實時3D圖像應用程序運作,包括遊戲與互動媒體。其特性是在較低的CPU使用率下實現較高的性能,這一點與Direct3D 12以及Mantle類似。除了較低的CPU使用率這點優勢外,Vulkan尤其在多CPU內核分發工作上能夠實現更好的效果。

Vulkan 作為 OpenGL 的接棒者,自然也是公開繪圖 API,可跨平台執行。除降低處理器負擔之外,手機到高階繪圖卡都是 Vulkan 的目標,不若過去 OpenGL 時代另外打造 OpenGL ES 供低階裝置使用。

Reference