我导入了两个金属文件并定义了两个可缝合的金属核心图像内核,其中一个是
CIColorKernel
,另一个是CIKernel
。正如 WWDC video 中所述,我需要向其他 Metal Linker 标志添加一个标志 -framework CoreImage
。不幸的是,Xcode 15 在此处添加了双引号并生成错误 metal: error: unknown argument: '-framework CoreImage'
。所以我在没有这个标志的情况下构建,它适用于添加的第一个内核。另一个内核从未添加到 metal.defaultlib 中并且无法加载。我怎样才能让它工作?
class SobelEdgeFilterHDR: CIFilter {
var inputImage: CIImage?
var inputParam: Float = 0.0
static var kernel: CIKernel = { () -> CIKernel in
let url = Bundle.main.url(forResource: "default",
withExtension: "metallib")!
let data = try! Data(contentsOf: url)
let kernelNames = CIKernel.kernelNames(fromMetalLibraryData: data)
NSLog("Kernels \(kernelNames)")
return try! CIKernel(functionName: "sobelEdgeFilterHDR", fromMetalLibraryData: data)
}()
override var outputImage : CIImage? {
guard let inputImage = inputImage else {
return nil
}
return SobelEdgeFilterHDR.kernel.apply(extent: inputImage.extent, roiCallback: { (index, rect) in
return rect }, arguments: [inputImage])
}
}