Swift 无法使用OSX 10.14中的代码在OSX 10.15中生成金属纹理

Swift 无法使用OSX 10.14中的代码在OSX 10.15中生成金属纹理,swift,macos,metal,Swift,Macos,Metal,我已经在OSX 10.14中成功地使用了我的代码来生成金属纹理: let textureLoaderOptions = [MTKTextureLoader.Option.origin : MTKTextureLoader.Origin.bottomLeft, MTKTextureLoader.Option.textureStorageMode : MTLStorageMode.managed.rawValue] as [MTKTextureLoader.Option : Any]

我已经在OSX 10.14中成功地使用了我的代码来生成金属纹理:

let textureLoaderOptions = [MTKTextureLoader.Option.origin : MTKTextureLoader.Origin.bottomLeft, MTKTextureLoader.Option.textureStorageMode : MTLStorageMode.managed.rawValue] as [MTKTextureLoader.Option : Any]        
do {
    let _image = myNSImage.cgImage(forProposedRect: nil, context: nil, hints: nil)
    let textureLoader = MTKTextureLoader(device: device)
    texture = try textureLoader.newTexture(cgImage: _image, options: textureLoaderOptions)
   } catch {
       dump(error)
   }
注意:为了简洁起见,省略了额外的逻辑和错误处理

现在我已将构建计算机升级到10.15,发现以下错误:

Error Domain=MTKTextureLoaderErrorDomain Code=0 "Image decoding failed" UserInfo={NSLocalizedDescription=Image decoding failed, MTKTextureLoaderErrorKey=Image decoding failed}
我目前正在考虑使用:

textureLoader.newTexture(URL: URL(fileURLWithPath: imageFilePath), options:textureLoaderOptions)
但是由于围绕着原始代码的其他逻辑,我更想知道,对于新的OSX,我是否错过了一件非常简单的事情。我假设它肯定是连接到OSX的,因为其他任何东西都没有改变,例如Xcode版本或硬件。它昨天起作用了,现在不起作用了。我甚至向应用商店提交了正在运行的应用程序,当他们在OSX 10.15中运行它时,它因崩溃而被拒绝


我使用的图像是
png
tiff
。两者都有相同的错误,并且都在OSX 10.14中工作。

因此升级似乎打开了一整罐蠕虫。整个项目需要重建,这似乎解决了我的特殊问题。正如@0xBFE1A8在他们的评论中所回避的,我从
NSImage
生成
CGImage
的方式需要在升级后重新修改。

您是否尝试过使用objective c编译相同的代码?它是否会产生相同的错误?我可以尝试一个小的测试项目。@0xBFE1A8谢谢,但经过短暂的查看,代码似乎无法直接移植到Obj-C。我必须创建一个纹理并将TIFF表示写入其中。如果它真的起作用,那么该代码的直接Swift端口可能也会起作用,但我想找出我的错误。如何加载cgimage?它来自一个从安全范围URL获取的NSImage。我将不得不尝试和思考如何最好地把它在不提供整个项目!