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