Невозможно создать металлическую текстуру в OSX 10.15 из кода, который работал в OSX 10.14 - PullRequest
0 голосов
/ 01 ноября 2019

Я успешно использовал свой код в 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 или аппаратное обеспечение - не изменилось. Это сработало вчера, а теперь нет. Я даже отправил работающее приложение в App Store, и оно было отклонено из-за этого сбоя, когда они запустили его в OSX 10.15.

Я использую изображения png и tiff. Оба с одинаковой ошибкой и оба работали в OSX 10.14.

1 Ответ

1 голос
/ 06 ноября 2019

Так что, похоже, обновление открыло целую банку с червями. Весь проект нужно было перестроить, и этот ответ , похоже, решил мою конкретную проблему. Поскольку @ 0xBFE1A8 ускользнул от них в своих комментариях, способ, которым я производил CGImage из NSImage, должен был быть переработан после обновления.

...