Alpha/透明度和 MTKView?
Alpha / Transparency & MTKView?
我有一个金属片段着色器,returns 一些带有 alpha 通道的透明颜色,我想在 MTKView 下显示一个 UIView,但我得到的只有背景结果是黑色和 "error noise".
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)
如果我更改清晰颜色,我可以在透明颜色下看到它,如果我跳过清晰颜色,我会看到 "error noise"。清晰的颜色 Alpha 通道真的有作用吗?
有谁知道如何使 MTKView 透明?
更新:
这里是让 MTKView 透明的神奇 属性:
self.isOpaque = false
如果 UIView
可能有透明内容或无法用不透明绘图填充自身,则应将其 opaque
(isOpaque
) 属性 设置为 false这样它将与它背后的任何东西正确地合成。因为,MTKView
是 UIView
的子类,这也适用于它。
首先你应该改变 window 的不透明。
然后你应该找到 MTKView 实例,并将其层的不透明修改为 NO。那应该可以。
- (void)viewWillAppear
{
[_view.window setOpaque:NO];
_view.window.backgroundColor = [NSColor clearColor];
}
- (void)viewDidLoad
{
[super viewDidLoad];
MTKView *view = (MTKView *)self.view;
view.layer.opaque = NO;
}
我有一个金属片段着色器,returns 一些带有 alpha 通道的透明颜色,我想在 MTKView 下显示一个 UIView,但我得到的只有背景结果是黑色和 "error noise".
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)
如果我更改清晰颜色,我可以在透明颜色下看到它,如果我跳过清晰颜色,我会看到 "error noise"。清晰的颜色 Alpha 通道真的有作用吗?
有谁知道如何使 MTKView 透明?
更新:
这里是让 MTKView 透明的神奇 属性:
self.isOpaque = false
如果 UIView
可能有透明内容或无法用不透明绘图填充自身,则应将其 opaque
(isOpaque
) 属性 设置为 false这样它将与它背后的任何东西正确地合成。因为,MTKView
是 UIView
的子类,这也适用于它。
首先你应该改变 window 的不透明。 然后你应该找到 MTKView 实例,并将其层的不透明修改为 NO。那应该可以。
- (void)viewWillAppear
{
[_view.window setOpaque:NO];
_view.window.backgroundColor = [NSColor clearColor];
}
- (void)viewDidLoad
{
[super viewDidLoad];
MTKView *view = (MTKView *)self.view;
view.layer.opaque = NO;
}