iOS和Mac上的Metal Shader语言之间是否有主要区别?我正在尝试从iOS移植我的Metal cifilters,它们看起来看起来完全不同
答案 0 :(得分:1)
是的,语言级别的平台之间应该没有区别。
我能想到的一个区别是macOS支持每通道32位的图像(“全”浮动),而在iOS中,您“只能”使用16位的半浮动图像。
我想到的另一个区别是输入采样器的默认坐标空间。在iOS中,采样器空间在相对坐标([0...1]
)中,而在macOS中,采样器空间在绝对坐标([0...width]
)中。您应该能够通过显式设置采样器矩阵(在macOS中)来统一该行为:
// see documentation for `kCISamplerAffineMatrix`
let scaleMatrix = [1.0/inputImage.extent.width, 0, 0, 1.0/inputImage.extent.height, 0, 0]
let inputSampler = CISampler(image: inputImage, options: [kCISamplerAffineMatrix: scaleMatrix])
kernel.apply(extent: domainOfDefinition, roiCallback: roiCallback, arguments: [inputSampler, ...])