首页 > 解决方案 > Metal alphaBlendOperation .max 奇怪的行为

问题描述

我正在使用金属来绘制一些线条,我的绘图画布中有纹理MTLRenderPassDescriptor,当我在其中绘制时,启用了混合MTLRenderPipelineDescriptor并且我正在使用alphaBlendOperation = .max

    renderPassDescriptor = MTLRenderPassDescriptor()
    let attachment = renderPassDescriptor?.colorAttachments[0]
    attachment?.texture = self.texture
    attachment?.loadAction = .load
    attachment?.storeAction = .store


    let rpd = MTLRenderPipelineDescriptor()
    rpd.colorAttachments[0].pixelFormat = .rgba8Unorm 
    let attachment = rpd.colorAttachments[0]!
    attachment.isBlendingEnabled = true
    attachment.rgbBlendOperation = .max
    attachment.alphaBlendOperation = .max

我可以更改画笔中的属性(大小、不透明度、硬度“模糊”)。然而,前两个刷子的效果非常好,如下图所示

![普通画笔绘图

但是,当我使用带有褪色边的模糊画笔连接线条时,我只有一个奇怪的行为,褪色区域没有按预期混合,并且在连接之间创建了一条空的小线。下图描述了这个问题,请检查单线和单点然后检查连接你可以很清楚地看到这个行为

![![用模糊画笔绘制

MTLRenderPassDescriptor 甚至应该从下纹理或画笔 alpha 中选择波纹管 alpha,但是当点击第二个和第三个点时,它会制作空行而不是选择一个 alpha,这就像在这些区域使 alpha 为零。

这是我褪色的刷子,你可以看到有一个渐变的颜色,但我不知道它是否有问题

在此处输入图像描述

请与我分享您必须解决的任何想法

标签: iosswiftiphonedrawmetal

解决方案


推荐阅读