MTLLibraryは、SCNSceneKitなどでmetalシェーダのストアとして機能するコンポーネントです。
https://qiita.com/noppefoxwolf/items/ae302839f01ec4d820a1
基本的にはプロジェクトにmetalファイルを入れればアプリコンパイル時にコンパイルされてdefaultLibraryとしてバンドルされますが、時にはランタイムでコンパイルしたい場合もあります。
一つ例にあげるとすれば、実行時までマクロの値が決まらない時などが挙げられます。
source.metal.txt
#ifdef OUTLINE_WIDTH
return float4(0,0,1,1);
#else
return float4(1,0,0,1);
#endif
MTLLibraryを作るには、MTLDeviceのmakeLibraryメソッドを使います。
library = try device.makeLibrary(source: source, options: options)
sourceには、Metal Shader Language
で書いたシェーダの文字列を、optionsにはMTLCompileOptions
を与えます。
マクロなどはoptionsで渡すことができます。
let options = MTLCompileOptions()
options.preprocessorMacros = [
"OUTLINE_WIDTH" : NSNumber(1),
]