Металлическая MTLTexture заменяет полупрозрачные области черным, когда значения альфа не равны 1 или 0

При использованииИмпортер текстур Appleили мой собственный, белый круг с мягкими краями, нарисованный программным обеспечением (с прозрачным bg) или в Photoshop (сохраненный как PNG) при визуализации, будет иметь полупрозрачные цвета, замененные черным при переносе в Metal.

Ниже приведен скриншот из Metal отладчика XCode, вы можете увидеть текстуру перед отправкой в ​​шейдеры.

Изображение расположено здесь (я недостаточно высоко ранжирован для вставки)

В Xcode, finder и при помещении в UIImageView исходная текстура не имеет кольца. Но где-то вдоль процесса UIImage -> CGContex -> MTLTexture (я имею в виду, в частности, часть MTLTexture) прозрачные разделы затемнены.

Я бился головой о стену, меняя все, что мог, последние пару дней, но не могу понять.

Чтобы быть прозрачным (ха), вот мой личный код импорта

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
    }
}

Но я не думаю, что это проблема (так как это копия Apple в Swift, и я использовал их без различий).

Любые выводы будут очень полезны.

Ответы на вопрос(2)

Ваш ответ на вопрос