我有一个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
答案 0 :(得分:6)
如果UIView
可能具有透明内容,或者无法使用不透明图形填充自身,则应将其opaque
(isOpaque
)属性设置为false,以使其正确与其背后的任何东西合成。由于MTKView
是UIView
的子类,因此也适用于它。