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