用金属加载纹理的首选方法
preferred method to load a texture with metal
我正在尝试像这样将资产图像加载到金属中:
let textureLoader = MTKTextureLoader(device: context.device)
do{
let image = UIImage(named: name)
try texture = textureLoader.newTextureWithCGImage(image!.CGImage!, options: [:])
}catch let error{
print("Failed to create texture, error \(error)")
}
我可以显示图像,但颜色被置换了,就好像文件包含 RGB 数据但它被解释为 BGR 数据一样。我知道金属层的默认颜色 space 是 BGRA8Unorm
但我不知道如何强制以该格式加载图像。
您应该在 MTKTextureLoader
上使用指定的 class 方法从 URL:
创建一个新的 MTLTexture
let device = MTLCreateSystemDefaultDevice()!
let loader = MTKTextureLoader(device: device)
let url = NSBundle.mainBundle().URLForResource("pic", withExtension: "jpg")!
let texture = try! loader.newTextureWithContentsOfURL(url, options: nil)
我正在尝试像这样将资产图像加载到金属中:
let textureLoader = MTKTextureLoader(device: context.device)
do{
let image = UIImage(named: name)
try texture = textureLoader.newTextureWithCGImage(image!.CGImage!, options: [:])
}catch let error{
print("Failed to create texture, error \(error)")
}
我可以显示图像,但颜色被置换了,就好像文件包含 RGB 数据但它被解释为 BGR 数据一样。我知道金属层的默认颜色 space 是 BGRA8Unorm
但我不知道如何强制以该格式加载图像。
您应该在 MTKTextureLoader
上使用指定的 class 方法从 URL:
MTLTexture
let device = MTLCreateSystemDefaultDevice()!
let loader = MTKTextureLoader(device: device)
let url = NSBundle.mainBundle().URLForResource("pic", withExtension: "jpg")!
let texture = try! loader.newTextureWithContentsOfURL(url, options: nil)