MTLRenderPassColorAttachmentDescriptor.clearColor не учитывает альфа-значение
Я новичок в металле и пытаюсь добавить металлический вид поверх другого 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
}
}