我有一个 MTKView 设置为使用 MTLPixelFormat.rgba16Float。我遇到了显示问题,下图可以很好地描述这些问题:
因此,预期的 UIColor 会被淘汰,但仅在它显示在 MTKView 中时。当我通过 CIIMage 将可绘制纹理转换回图像以在 UIView 中显示时,我恢复了原始颜色。这是我创建该输出的方式:
let colorSpace = CGColorSpaceCreateDeviceRGB()
let kciOptions = [kCIImageColorSpace: colorSpace,
kCIContextOutputPremultiplied: true,
kCIContextUseSoftwareRenderer: false] as [String : Any]
let strokeCIImage = CIImage(mtlTexture: metalTextureComposite, options: kciOptions)!.oriented(CGImagePropertyOrientation.downMirrored)
let imageCropCG = cicontext.createCGImage(strokeCIImage, from: bbox, format: kCIFormatABGR8, colorSpace: colorSpace)
其他相关设置:
uiColorBrushDefault: UIColor = UIColor(red: 0.92, green: 0.79, blue: 0.18, alpha: 1.0)
self.colorPixelFormat = MTLPixelFormat.rgba16Float
renderPipelineDescriptor.colorAttachments[0].pixelFormat = self.colorPixelFormat
// below is the colorspace for the texture which is tinted with UIColor
let colorSpace = CGColorSpaceCreateDeviceRGB()
let texDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: MTLPixelFormat.rgba8Unorm, width: Int(width), height: Int(height), mipmapped: isMipmaped)
target = texDescriptor.textureType
texture = device.makeTexture(descriptor: texDescriptor)
一些帖子暗示 sRGB 被假定在某处,但没有具体说明如何禁用它。
我希望我在 MTKView 上显示的颜色与输入相匹配(无论如何都尽可能接近它),并且仍然能够将该纹理转换为我可以在 ImageView 中显示的东西。我已经在 iPad Air 和新的 iPad Pro 上对此进行了测试。相同的行为。任何帮助,将不胜感激。