寒假無聊,學(xué)點(diǎn)vulkan?

新的一年又來了,希望學(xué)點(diǎn)不一樣的東西嗎?
馬上就到3月份了,各大企業(yè)的實(shí)習(xí)校招就要開始了,準(zhǔn)備投簡歷的你,尤其是準(zhǔn)備投游戲公司的你,希望自己的簡歷上有些與眾不同的出彩內(nèi)容嗎?
如果答案是Yes,那么請繼續(xù)往下看。
本節(jié)是vulkan入門教程的一個(gè)引言,雖然只是引言,但是我還是希望porn友們稍微看一下。
Vulkan作為一個(gè)新API,她有很多概念還沒有一個(gè)準(zhǔn)確統(tǒng)一的翻譯,比如image,view,semaphore,barrier,fence,queue。這些詞匯很簡單,但是如果直接使用它的漢譯,就很傻很晦澀,比如說顯存中的圖片,你會(huì)說這是啥玩意,說顯存中的image,就好很多。所以這個(gè)教程很多概念我會(huì)直接使用英文單詞,有些中午也會(huì)用括號展示英文,寫的很Chinglish希望大家原諒。
本教程是一個(gè)非?;A(chǔ)的Vulkan教程,并教不了什么東西,也就是幫大家克服一下對新概念的恐懼。對于有openGL/directX基礎(chǔ)的同學(xué),本教程可以幫你迅速掌握vulkan的一些概念,同時(shí)和自己的圖形學(xué)知識相銜接。vulkan相比openGL,非常復(fù)雜,因?yàn)榘岩郧坝沈?qū)動(dòng)負(fù)責(zé)的工作都交給開發(fā)者完成了,相信這個(gè)大家在看這篇教程之前就已經(jīng)知道了。如果沒有g(shù)lfw來幫我處理各平臺(tái)之間的差異,畫個(gè)三角都需要超過2k行代碼,而且還會(huì)宏無數(shù),有了glfw之后,畫三角形的代碼會(huì)被大幅縮減,但也有8、9百行,而同樣功能的openGL代碼也就2百行。對于編程的新手來說,一次寫將近千行代碼其實(shí)是個(gè)挑戰(zhàn),所以第一次畫三角形的代碼我拆的很散。而且相比openGL至多一下午就能畫出三角形不同,對于新人,也許需要3~4天,或者更久。這個(gè)教程,會(huì)從非常簡單的base code開始,一點(diǎn)一點(diǎn)擴(kuò)充,后一節(jié)的代碼建立在前一節(jié)的基礎(chǔ)上。我希望每一節(jié)代碼都能親自敲一下,特別是新手。Copy的和自己親自打的,感覺到底是不一樣。
這篇教程,我希望你有下列準(zhǔn)備:
支持vulkan的顯卡(N卡開普勒及以上,A卡GCN架構(gòu),I卡HD4000以上(HD3000的vulkan驅(qū)動(dòng)貌似只有l(wèi)inux版本))
c++開發(fā)經(jīng)驗(yàn)(我會(huì)大量使用STL,而且我不會(huì)贅述STL相關(guān)的東西;我也希望你有能力自己解決各種依賴)
支持c++14的編譯器(雖然我應(yīng)該只用了c++11的特性)
有自己習(xí)慣的開發(fā)工具(我不希望把這個(gè)教程局限在某種IDE/Editor和構(gòu)建工具上)
最好有圖形學(xué)開發(fā)經(jīng)驗(yàn),比如openGL或者direct3D
在提問題之前看一下提問的智慧(起碼我不希望我看到的問題是代碼編譯不過或者索要源碼這樣的)
vulkan雖然非常冗長,復(fù)雜。但是,寫起來麻煩,維護(hù)起來容易,因?yàn)樗袞|西都由開發(fā)者顯示指定了,并不會(huì)發(fā)生什么不可預(yù)料的行為。vulkan在一出生時(shí),就考慮到了openGL開發(fā)難以糾錯(cuò)和調(diào)試的問題,因此創(chuàng)造了層(layer)的概念。在lunarG SDK中,在很早版本就提供了tracer和replayer,而在高版本的SDK中,更是直接提供了可視化的tracer。vulkan作為優(yōu)先處理高性能圖像的API,自然是需要滿足游戲引擎的很多需求,因此vulkan和HLSL的相性其實(shí)特別好。如果有機(jī)會(huì),我也會(huì)講一下vulkan使用HLSL,以及vulkan用幀調(diào)試器的調(diào)試技巧。