9

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

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

layer?.backgroundColor = NSColor.clearColor().CGColor

我已经验证了这个视图实际上比另一个视图更清晰(在 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()
        }
    }

关于如何在渲染任何内容之前用透明颜色清除纹理的任何建议?

谢谢你。

在此处输入图像描述

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

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

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

        layer?.opaque = false
    }
}
4

0 回答 0