Vulkan 作為新的標(biāo)準(zhǔn)圖形顯示 API 已經(jīng)發(fā)布已久,Windows 和 Linux 上早已由各主流顯卡廠商所適配萨咳,唯獨(dú) macOS 上蘋果對(duì) Vulkan 反應(yīng)遲鈍,距 Vulkan 1.0 標(biāo)準(zhǔn)正式發(fā)布已經(jīng)過(guò)去了近兩年,macOS 仍舊沒(méi)有提供 Vulkan 的支持祥国。當(dāng)然蘋果沒(méi)提供官方層面的支持并不代表在 macOS 上就不能開(kāi)發(fā)和“運(yùn)行”使用 Vulkan API 開(kāi)發(fā)的程序了,MoltenVK 項(xiàng)目提供了一個(gè)使用 Metal API 實(shí)現(xiàn)的 Vulkan API 兼容的框架晾腔,并且提供了一個(gè) GLSL舌稀、SPIR-V 與 MSL 三種著色器程序代碼離線狀態(tài)相互轉(zhuǎn)換的工具,這使得在 macOS 上開(kāi)發(fā) Vulkan 程序成為了可能灼擂。
運(yùn)行環(huán)境
- macOS 10.11 El Capitan 或更新
- iOS 9 或更新壁查,僅支持 64 位設(shè)備,暫不支持模擬器運(yùn)行
開(kāi)發(fā)環(huán)境
- macOS 10.12 Sierra 或更新
- Xcode 9 或更新
環(huán)境搭建
在 MoltenVK 官方網(wǎng)站上點(diǎn)擊 Free Trial(免費(fèi)試用)便可下載得到專用 SDK剔应。
為了確保代碼的可移植性睡腿,我們用 GLFW 與操作系統(tǒng)交互,不過(guò)需要注意的是峻贮,最新的穩(wěn)定版并不支持 MoltenVK席怪,git 中的版本則可以做到這一點(diǎn)。
GLFW 官網(wǎng)不提供 macOS 二進(jìn)制下載纤控,需要自行下載代碼編譯挂捻。編譯僅需依賴 CMake,利用第三方包管理或者從 CMake 官網(wǎng) 下載皆可船万。
在終端中進(jìn)入到 GLFW 的目錄刻撒,在其中執(zhí)行
mkdir build
pushd build
cmake ../ -DVULKAN_LIBRARY=/path/to/libMoltenVK.dylib -DVULKAN_INCLUDE_DIR=/path/to/MoltenVK/include
popd
make --build ./build
需要把 VULKAN_LIBRARY
和 VULKAN_INCLUDE_DIR
手動(dòng)制定到 MoltenVK SDK 中對(duì)應(yīng)的位置。
在 Xcode 中新建 Command Line 項(xiàng)目耿导,把 build/src
下的 libglfw.a
連同 MoltenVK.framework
添加到項(xiàng)目中声怔,在項(xiàng)目中設(shè)定好頭文件搜索位置。
寫個(gè) Demo
代碼則請(qǐng)參考 黑桃花 的 Vulkan 系列文章碎节。需要注意的是捧搞,MoltenVK 并不支持文中所使用的 VK_LAYER_LUNARG_standard_validaction
層,這個(gè)步驟跳過(guò)即可。
對(duì)于 GLSL 編譯為 SPIR-V 的步驟胎撇,GLSL 轉(zhuǎn)換為 SPIR-V 的工具 MoltenVK 也有提供介粘,在文件夾中的 MoltenShaderConverter/Tools/MoltenShaderConverter
,使用 MoltenShaderConverter -gi shader.frag -so frag.spv
和 MoltenShaderConverter -gi shader.vert -so vert.spv
也可以達(dá)成同樣效果晚树。
最后 ?R 運(yùn)行即可看到效果姻采。
如果只是想看個(gè)結(jié)果,請(qǐng)從這里下載經(jīng)過(guò)一定修改后的代碼爵憎。
這段代碼是完全標(biāo)準(zhǔn)的慨亲,你可以在Windows和Linux上不需要改動(dòng)一行就可以運(yùn)行。祝你們好運(yùn)吧宝鼓。