MTLRenderPassColorAttachmentDescriptor.clearColor不尊重alpha值

Ren*_*ger 8 macos ios metal metalkit

我是Metal的新手,我正在尝试在另一个NSView上添加金属视图.在金属视图(MTKView)中,我想在透明(透明)背景上渲染三角形.但是,MTKView的背景始终是纯色.这是我尝试过的:

我将NSView的背景颜色设置为清晰的颜色:

layer?.backgroundColor = NSColor.clearColor().CGColor
Run Code Online (Sandbox Code Playgroud)

我已经验证了这个视图实际上在其他视图中呈现清晰(在drawRect中没有呈现).

如果我开始在drawRect中渲染我的三角形,它总是在一个坚实的背景上.我能够改变背景颜色RGB值,机器人不是A.它总是纯色.

override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        ...

        if let rpd = currentRenderPassDescriptor, drawable = currentDrawable {

            rpd.colorAttachments[0].loadAction = .Clear
            rpd.colorAttachments[0].clearColor = MTLClearColorMake(1, 0, 0, 0.5)

            ...

            command_buffer.presentDrawable(drawable)
            command_buffer.commit()
        }
    }
Run Code Online (Sandbox Code Playgroud)

有关如何在将任何内容渲染到透明色之前清除纹理的任何建议吗?

谢谢.

在此输入图像描述

更新:我似乎已经回答了我自己的问题,并且正在用它更新这篇文章,以便其他人可以发现这个有用.

诀窍似乎是将图层设置为透明.

class MetalView: MTKView {
    required init(coder: NSCoder) {
        super.init(coder: coder)

        layer?.opaque = false
    }
}
Run Code Online (Sandbox Code Playgroud)