Metal 開(kāi)發(fā) | 使用 C++ 進(jìn)行接口調(diào)用~~
鏈接在此:
https://developer.apple.com/metal/cpp/
文章大意就是:一頓操作安排上,蘋(píng)果現(xiàn)在支持用 C++ 開(kāi)發(fā) Metal 了。
眾所周知,在做渲染后端開(kāi)發(fā)時(shí),OpenGL 和 Vulkan 都是支持 C++ 開(kāi)發(fā)的,可以直接定義 C++ 相關(guān)接口并根據(jù)平臺(tái)特性去實(shí)現(xiàn)。
而 Metal 則需要支持 Objective-C 才行了,編寫(xiě)的文件也是 .m 文件格式,但是現(xiàn)在就可以直接寫(xiě) C++ 的渲染實(shí)現(xiàn)了。
前置準(zhǔn)備
根據(jù)官方文章中的內(nèi)容,首先要確保 Xcode 版本在 9.3 以上,并且要使用 C++17 的語(yǔ)法。
同時(shí)要下載好 Metal 對(duì)應(yīng)的 C++ 頭文件(metal-cpp),鏈接地址如下:
https://developer.apple.com/metal/cpp/files/metal-cpp_macOS12_iOS15.zip
創(chuàng)建工程
創(chuàng)建一個(gè) macOS 上的工程,可以是 App 工程也可以是命令行工程,主要是驗(yàn)證一下環(huán)境配置是否正確。
接下來(lái)要把下載好的 Metal 頭文件(metal-cpp)放在工程搜索路徑中的,如下圖所示:

然后把 C++ 版本改成 std=c++17 。

接下來(lái)要把 framework 依賴包含進(jìn)來(lái):

主要是:
Foundation.framework QuartzCore.framework Metal.framework
把以上的環(huán)境依賴都搞定之后,就可以進(jìn)行代碼開(kāi)發(fā)了。
代碼開(kāi)發(fā)
首先需要把 Metal 相關(guān)頭文件包含進(jìn)來(lái),由于它只是一個(gè)頭文件的庫(kù),要生成對(duì)應(yīng)的實(shí)現(xiàn),還要把一些宏配置加上。
核心就是如下一段代碼,
#define?NS_PRIVATE_IMPLEMENTATION
#define?CA_PRIVATE_IMPLEMENTATION
#define?MTL_PRIVATE_IMPLEMENTATION
#include?
#include?
#include?
在其他需要用到 Metal 相關(guān)對(duì)象的地方,就只用包含三個(gè)頭文件就好了。
三個(gè)頭文件都是配套一起出現(xiàn)的,當(dāng)然也可以只包含一個(gè)頭文件就行。
在下載 metal-cpp 的 SingleHeader 文件夾下,有一個(gè) MakeSingleHeader.py 腳本, 運(yùn)行它來(lái)生成:
./SingleHeader/MakeSingleHeader.py?Foundation/Foundation.hpp?QuartzCore/QuartzCore.hpp?Metal/Metal.hpp
這樣一來(lái),在 SingleHeader 文件夾下會(huì)生成 Metal.hpp 文件,它包含了所有會(huì)用到的對(duì)象,只包含它一個(gè)就好了。
#define?NS_PRIVATE_IMPLEMENTATION
#define?CA_PRIVATE_IMPLEMENTATION
#define?MTL_PRIVATE_IMPLEMENTATION
#include?
成功引入了 Metal 頭文件就可以進(jìn)行開(kāi)發(fā)了,官方也給出了一個(gè) Demo 工程,可以運(yùn)行下這個(gè)工程:
https://developer.apple.com/documentation/metal/rendering_a_scene_with_deferred_lighting_in_c
另外,用 Metal 做渲染引擎的開(kāi)發(fā),比用 OpenGL 寫(xiě)要快多了,因?yàn)樗旧砭吞峁┝撕芏喾庋b工具類,比 OpenGL 從零開(kāi)始寫(xiě)要省不少事,而且說(shuō)不定性能還強(qiáng)不少。

技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。
私信領(lǐng)取相關(guān)資料
推薦閱讀:
音視頻開(kāi)發(fā)工作經(jīng)驗(yàn)分享 || 視頻版
開(kāi)通專輯 | 細(xì)數(shù)那些年寫(xiě)過(guò)的技術(shù)文章專輯
Android NDK 免費(fèi)視頻在線學(xué)習(xí)!??!
你想要的音視頻開(kāi)發(fā)資料庫(kù)來(lái)了
推薦幾個(gè)堪稱教科書(shū)級(jí)別的 Android 音視頻入門(mén)項(xiàng)目
覺(jué)得不錯(cuò),點(diǎn)個(gè)在看唄~

