Мне просто нужно создать прозрачную текстуру. (Пиксели с альфа 0).
func layerTexture()-> MTLTexture {
let width = Int(self.drawableSize.width )
let height = Int(self.drawableSize.height )
let texDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: .bgra8Unorm, width: width , height: height, mipmapped: false)
let temparyTexture = self.device?.makeTexture(descriptor: texDescriptor)
return temparyTexture!
}
когда я открываю temparyTexture с помощью предварительного просмотра, он кажется черным. Что здесь не хватает?
UPDATE
Я только что попытался создать текстуру, используя прозрачное изображение.
Код.
func layerTexture(imageData:Data)-> MTLTexture {
let width = Int(self.drawableSize.width )
let height = Int(self.drawableSize.height )
let bytesPerRow = width * 4
let texDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: .rgba8Unorm, width: width , height: height, mipmapped: false)
let temparyTexture = self.device?.makeTexture(descriptor: texDescriptor)
let region = MTLRegionMake2D(0, 0, width, height)
imageData.withUnsafeBytes { (u8Ptr: UnsafePointer<UInt8>) in
let rawPtr = UnsafeRawPointer(u8Ptr)
temparyTexture?.replace(region: region, mipmapLevel: 0, withBytes: rawPtr, bytesPerRow: bytesPerRow)
}
return temparyTexture!
}
метод вызывается следующим образом
let image = UIImage(named: "layer1.png")!
let imageData = UIImagePNGRepresentation(image)
self.layerTexture(imageData: imageData!)
где layer1.png - прозрачный png. Но даже при сбое с сообщением «Поток 1: EXC_BAD_ACCESS (code = 1, address = 0x107e8c000)» в момент, когда я пытаюсь заменить текстуру. Я считаю, что это потому, что данные изображений сжаты, а rawpointer должен указывать на несжатые данные. Как я могу решить это?
Я на правильном пути или совсем не в том направлении? Есть ли другие альтернативы. Мне просто нужно создать прозрачную текстуру.