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

0 ответов

Другие вопросы по тегам