我有一个金属碎片着色器,返回一些透明的颜色与 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
MTLRenderPDescriptor:
renderPDescriptor.colorAttachments[0].loadAction = .clear
renderPDescriptor.colorAttachments[0].clearColor = MTLClearColor(red: 0, green: 0, blue: 0, alpha: 0)
如果我改变清晰的颜色,我可以在透明的颜色下看到它,如果我跳过清晰的颜色,我看到“错误噪声”。
有谁知道如何使 MTKView 透明?
Update:以下是使 MTKView 透明的神奇属性:
self.isOpaque = false
如果UIView
可能具有透明内容或无法用不透明的绘图填充自身,则应将其opaque
(isOpaque
)属性设置为 false,以便将其与后面的任何内容正确合成。由于MTKView
是UIView
的子类,因此这也适用于它。
首先,您应该更改窗口的不透明。然后,您应该找到 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;
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(5条)