openGL、D3D、vulkan区别简介
跨平臺之王——OpenGL
OpenGL發(fā)展至今,已經有20余年,作為一個成熟并久負盛名的跨平臺計算機圖形應用程序接口規(guī)范,它被廣泛使用在游戲、影視、軍事、航空航天、地理、醫(yī)學、機械設計,以及各類科學數據可視化等領域,也演變出各種版本不過都是基于opengl的比如嵌入式中的OpenGL ES,又基于OpenGL ES發(fā)展而來的web端也是H5現在最重要的WebGL,WebGL又是為H5 提供了畫布功能,同樣的都是基于js的框架 WebGl都有three.js cesium badylon.js等等框架應用場景也都不一樣,他們的介紹在我博客中有介紹three.js cesium badylon.js 以及webgl區(qū)別;
OpenGL可以用來做什么?視頻、圖形、圖片處理 ,2D/3D游戲引擎開發(fā),科學可視化,醫(yī)學軟件開發(fā),CAD(計算機輔助技術),虛擬實境(AR,VR),AI(人工智能);
OpenGL是一種圖形應用程序編程接口(Application Programming Interface,API)。它是一種可以對圖形硬件設備特性進行訪問的軟件庫,OpenGL被設計為一個現代化的、硬件無關的接口,因此我們可以在不考慮計算機操作系統(tǒng)或窗口系統(tǒng)的前提下,在多種不同的圖形硬件系統(tǒng)上,完全通過軟件的方式實現OpenGL的接口。
OpenGL還提供了:
基于Windows平臺開發(fā)者——D3D
Direct3D(簡稱:D3D)與DirectX的關系DirectX,由微軟創(chuàng)建的多媒體編程接口,是由很多API組成,按照性質分類,分為:顯示部分、聲音部分、輸入部分和網絡部分,其中顯示部分擔任圖像處理關鍵,其中D3D就是其中的一部分。
D3D主要負責3D效果的顯示,例如CS中的場景和人物就使用了DirectX的D3D,它與OpenGL同為電腦繪圖軟件和電腦游戲最常用的兩套繪圖編程接口之一。,最重要的版本是D9、D11\D12是很大的不同版本;以下是D3D的官網;
Microsoft的D3D組件、其他Microsoft DirectX、操作系統(tǒng)和系統(tǒng)硬件之間的關系:
HAL(硬件抽象層)提供設備獨立;HAL是由設備制造商提供的設備指定接口,D3D直接使用顯示硬件來工作。程序才能不需要和HAL交互。應用程序使用D3D暴露的一系列接口和方法而不是HAL提供的機制來使用顯示設備。 3D程序和GDI程序一樣都通過顯示卡的設備驅動來訪問圖形硬件。與GDI不同的是,D3D可以在選擇一個HAL設備的時候利用硬件特性,HAL設備提供了基于顯示卡支持的硬件加速
這里特別強調:說道D3D就不得不說GDI,同樣是微軟的親兒子有什么不同?
都是用的顯卡加速,區(qū)別最大的是D3D支持顯存位圖,GDI中位圖只能是內存,而且D#D處理方式更加貼近硬件解析更快,GDI已經喪失了加速!
OpenGL的替代者——VulkanVulkan
Vulkan是Khronos組織制定的“下一代”開放的圖形顯示API,是與DirectX12可以匹敵的GPU API標準。Vulkan是基于AMD的Mantle API演化而來,目前Vulkan 1.0標準已經完成并正式發(fā)布。Vulkan是一個跨平臺的2D和3D繪圖應用程序接口(API),最早由科納斯(Khronos)組織在2015年游戲開發(fā)者大會(GDC)上發(fā)表。旨在替代OpenGL,提高圖形性能。
相對于OpenGLVulkan的優(yōu)勢:
- 更簡單的顯示驅動( Vulkan提供了能直接控制和訪問底層GPU的顯示驅動抽象層,
顯示驅動只是對硬件薄薄的封裝,這樣能夠顯著提升操作GPU硬件的效率和性能。之前OpenGL的驅動層對開發(fā)者隱藏的很多細節(jié),現在都暴露出來。Vulkan甚至不包含運行期的錯誤檢查層。驅動層干的事情少了,隱藏的bug也就少了) - 支持多線程(
Vulkan不再使用OpenGL的狀態(tài)機設計,內部也不保存全局狀態(tài)變量。顯示資源完全由應用層負責管理,包括內存管理、線程管理、多線程繪制命令產生、渲染隊列提交等。應用程序可以充分利用CPU的多核多線程的計算資源,減少CPU等待,降低延遲。
帶來的問題是,線程間的同步問題也由應用程序負責,從而對開發(fā)人員的要求也更高) - 預編譯shader(這個非常強!驅動層不提供前端shader編譯器,只支持標準可移植中間表示二進制代碼(SPIR-V)。即提高了執(zhí)行Shaders的效率又增加了將來著色語言的靈活性。所以目前的GLSL/HLSL可以直接通過工具轉換為SPIR-V,在Vulkan中使用。這樣就可以使用離線的shader編譯。另外,SPIR-V還支持OpenCL!)
CPU與GPU、OPENGL、DX、顯卡驅動間的關系:
個人建議:
如果是一個新手的話,不建議直接學習vulkan,vulkan的使用門檻很高,需要對硬件驅動框架有一個比較綜合的認識,并且vulkan的環(huán)境很難搭建,極容易讓新人產生挫敗感,從而興趣。opengl的入門相對容易,對新人很友好,由于是學習階段,因此也不用太關心opengl的性能/多線程問題,在使用的過程中可以加深去底層驅動及硬件架構的認識,在有了一些的基礎之后再入手vulkan會更加容易
總結
以上是生活随笔為你收集整理的openGL、D3D、vulkan区别简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css选择器nth-child
- 下一篇: 由一道竞赛题再论电介质受力和静电场能量问