iOS 和 Mac 上的 Metal Shader 语言之间有什么重大区别吗?我正在尝试从iOS移植我的金属cifilters,它们看起来完全不同
是的,平台之间在语言层面上不应该有区别。
我能想到的一个区别是,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, ...])