A MTLTexture metálica substitui as áreas semi-transparentes pelo preto quando valores alfa que não são 1 ou 0
Enquanto estiver usandoImportador de textura da Apple, ou o meu, um círculo branco de arestas suaves desenhado em software (com uma BG transparente) ou no Photoshop (salvo como PNG) quando renderizado terá suas cores semitransparentes substituídas por preto quando introduzidas no Metal.
Abaixo está uma captura de tela do depurador de metal do Xcode, você pode ver a textura antes de ser enviada para shaders.
Imagem localizada aqui (não tenho uma classificação alta o suficiente para incorporar)
No Xcode, localizador, e quando colocada em um UIImageView, a textura de origem não possui o anel. Mas em algum lugar ao longo do processo UIImage -> CGContex -> MTLTexture (eu estou pensando especificamente na parte MTLTexture), as seções tranparentes são escurecidas.
Eu tenho batido minha cabeça contra a parede, mudando tudo o que pude nos últimos dias, mas não consigo entender.
Para ser transparente (ha), aqui está o meu código de importação pessoal
import UIKit
import CoreGraphics
class MetalTexture {
class func imageToTexture(imageNamed: String, device: MTLDevice) -> MTLTexture {
let bytesPerPixel = 4
let bitsPerComponent = 8
var image = UIImage(named: imageNamed)!
let width = Int(image.size.width)
let height = Int(image.size.height)
let bounds = CGRectMake(0, 0, CGFloat(width), CGFloat(height))
var rowBytes = width * bytesPerPixel
var colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGBitmapContextCreate(nil, width, height, bitsPerComponent, rowBytes, colorSpace, CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue))
CGContextClearRect(context, bounds)
CGContextTranslateCTM(context, CGFloat(width), CGFloat(height))
CGContextScaleCTM(context, -1.0, -1.0)
CGContextDrawImage(context, bounds, image.CGImage)
var texDescriptor = MTLTextureDescriptor.texture2DDescriptorWithPixelFormat(.RGBA8Unorm, width: width, height: height, mipmapped: false)
var texture = device.newTextureWithDescriptor(texDescriptor)
texture.label = imageNamed
var pixelsData = CGBitmapContextGetData(context)
var region = MTLRegionMake2D(0, 0, width, height)
texture.replaceRegion(region, mipmapLevel: 0, withBytes: pixelsData, bytesPerRow: rowBytes)
return texture
}
}
Mas não acho que esse seja o problema (já que é uma cópia da Apple no Swift, e usei a deles sem diferenças).
Qualquer pista seria super útil.