Apple's texture importer'u kullanırken veya kendim, yazılımda (şeffaf bir bg ile) veya Photoshop'ta (beyaz bir kenarlı) çizilen beyaz yumuşak kenarlı bir daire Bir PNG olarak işlendiğinde, yarı-şeffaf renklerinin Metal'e getirildiğinde siyah ile yer değiştirmesi gerekir.Metal MTLTexture, 1 veya 0 olmayan Alfa değerleri olduğunda yarı saydam alanları siyahla değiştirir 0
Xcode'un Metal hata ayıklayıcısından alınan bir ekran yakalayıcısıdır, dokuyu gölgelendiricilere gönderilmeden önce görebilirsiniz. Bir UIImageView sokulduklarında Xcode
Image located here (I'm not high ranked enough to embed)
, bulucu ve kaynak doku halkasına sahip değildir. Ama UIImage -> CGContex -> MTLTexture süreci boyunca bir yerlerde (özellikle MTLTexture parçasını düşünüyorum) şeffaf bölümler kararıyor.Kafamı duvara yapıştırarak geçtiğimiz birkaç gün boyunca yapabileceğim her şeyi değiştirdim ama anlayamıyorum.
, burada benim kişisel ithalat koduimport 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
}
}
olduğu Ama Apple'ın Swift içinde bir kopyası beri (sorun olduğunu sanmıyorum, ben sizinkinin yerine kullandım şeffaf (ha) olmak farklılık olmadan).
Herhangi bir müşteri adayı süper yardımcı olabilir.
Bu aslında "siyah" değil, görüyorsunuz. Beyazdır, görüntünün alfa kanalıyla çarpılır, arka arkaya alfa ile çarpılır ve sonuca eklenir. CGImageAlphaInfo.Last'ın sorunu çözeceğini düşündüm, ancak bu donanım üzerinde uygulanmadı. Eşlenmemiş verileri nasıl elde edeceğimizi öğrenene kadar premultiplied alfa harmanlamayı uygulayabilir misiniz? – Jessy
Aha! Beni doğru yol boyunca yönlendirdin. Cevabımı şimdi gönderiyorum. –