Harley-xk / MaLiang

iOS painting and drawing library based on Metal. 神笔马良有一支神笔(基于 Metal 的涂鸦绘图库)
MIT License
1.47k stars 208 forks source link

橡皮擦无法完全擦除 #96

Open WhiteRainbow opened 4 years ago

WhiteRainbow commented 4 years ago

测试bug情况 画笔颜色: 纯红色 画笔大小: 20 画布背景颜色: 透明 控制器背景颜色: 棕色 橡皮擦大小: 30

只要橡皮擦大小大于画笔大小就无法完全擦出, demo里背景是白色看不出来, 换个其他颜色可以看到 我试图将MTLRenderPipelineColorAttachmentDescriptor中的所有颜色混合因子都设为0, 虽然可以完全擦除, 但是橡皮擦形状非圆形,而是个正方形

Harley-xk commented 4 years ago

确实有问题,应该是之前改透明度问题造成的...

Harley-xk commented 4 years ago

@WhiteRainbow 之前透明度问题的解决方案不完善,导致这里也出了问题。暂时可以通过把橡皮擦的 opacity 属性强制设为 1来解决。等后续优化了透明度那一块的逻辑之后可以彻底解决这个问题。

WhiteRainbow commented 4 years ago

@Harley-xk 另外框架如果支持只生成绘制部分的图片就更完美了,因为如果绘制比较少而画布比较大时以整块画布生成图片会有很多空白

KishanMakk commented 3 years ago

You can update blend options to like this it will erase your drawing completely Temp. solution

    attachment.isBlendingEnabled = true
    attachment.alphaBlendOperation = .subtract
    attachment.sourceRGBBlendFactor = .zero
    attachment.destinationRGBBlendFactor = .zero
    attachment.sourceAlphaBlendFactor = .zero
    attachment.destinationAlphaBlendFactor = .zero