Alpha / Transparency& MTKView?

时间:2017-12-05 00:00:37

标签: alpha metal

我有一个Metal片段着色器,它返回一些带alpha通道的透明颜色,我想在MTKView下显示一个UIView,但是它们只有我得到的背景结果是黑色和“错误噪音”。

MTLRenderPipelineDescriptor:

pipelineStateDescriptor.isAlphaToCoverageEnabled = true
pipelineStateDescriptor.colorAttachments[0].pixelFormat = .bgra8Unorm
pipelineStateDescriptor.colorAttachments[0].isBlendingEnabled = true
pipelineStateDescriptor.colorAttachments[0].destinationRGBBlendFactor = .oneMinusSourceAlpha
pipelineStateDescriptor.colorAttachments[0].destinationAlphaBlendFactor = .oneMinusSourceAlpha

MTLRenderPassDescriptor:

renderPassDescriptor.colorAttachments[0].loadAction = .clear
renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColor(red: 0, green: 0, blue: 0, alpha: 0)

如果我改变了清晰的颜色,我可以在透明色下看到它,如果我跳过清晰的颜色,我会看到“错误噪音”。明确的颜色alpha通道实际上做了什么吗?

有谁知道如何让MTKView透明化?

更新

这是使MTKView透明的神奇属性:

self.isOpaque = false

1 个答案:

答案 0 :(得分:6)

如果UIView可能具有透明内容,或者无法使用不透明图形填充自身,则应将其opaqueisOpaque)属性设置为false,以使其正确与其背后的任何东西合成。由于MTKViewUIView的子类,因此也适用于它。