Posted at

Cocoapodsでmetalファイルを含めて配布する方法と、CoreImageで使う方法

cocoapodsでMetalファイルを含めて配布する場合は、podspecにmetalファイルを追加します。


LibraryName.podspec

s.source_files = 'LibraryName/Classes/**/*.{swift,metal}'


また、CoreImageのCIKernelとして呼ぶ場合は次のような設定を追加します。


LibraryName.podspec

s.pod_target_xcconfig = {

'MTLLINKER_FLAGS' => '-cikernel',
'MTL_COMPILER_FLAGS' => '-fcikernel'
}

これでMetalファイルに含まれる関数がCoreImage用としてコンパイルされます。

CIKernelをライブラリ内で生成するには、自身のバンドルを指定します。

private final class BundleToken {}

let url = Bundle(for: BundleToken.self).url(forResource: "default", withExtension: "metallib")!
let data = try! Data(contentsOf: url)
let kernel = try! CIColorKernel(functionName: "filterName", fromMetalLibraryData: data)