diff --git a/Memola/Canvas/Core/Renderer.swift b/Memola/Canvas/Core/Renderer.swift index d8cd644..85c77dc 100644 --- a/Memola/Canvas/Core/Renderer.swift +++ b/Memola/Canvas/Core/Renderer.swift @@ -69,6 +69,7 @@ final class Renderer { func draw(in view: MTKView, on canvas: Canvas) { if !updatesViewPort { + strokeRenderPass.eraserRenderPass = eraserRenderPass graphicRenderPass.photoRenderPass = photoRenderPass graphicRenderPass.strokeRenderPass = strokeRenderPass graphicRenderPass.eraserRenderPass = eraserRenderPass diff --git a/Memola/Canvas/RenderPasses/GraphicRenderPass.swift b/Memola/Canvas/RenderPasses/GraphicRenderPass.swift index a21ec42..ee3a2d8 100644 --- a/Memola/Canvas/RenderPasses/GraphicRenderPass.swift +++ b/Memola/Canvas/RenderPasses/GraphicRenderPass.swift @@ -67,13 +67,6 @@ class GraphicRenderPass: RenderPass { strokeRenderPass.graphicDescriptor = descriptor strokeRenderPass.graphicPipelineState = graphicPipelineState strokeRenderPass.draw(on: canvas, with: renderer) - - if let stroke = stroke as? PenStroke, !stroke.isEmptyErasedQuads { - descriptor.colorAttachments[0].loadAction = .load - eraserRenderPass.stroke = stroke - eraserRenderPass.descriptor = descriptor - eraserRenderPass.draw(on: canvas, with: renderer) - } } case .photo(let photo): descriptor.colorAttachments[0].loadAction = clearsTexture ? .clear : .load @@ -103,13 +96,6 @@ class GraphicRenderPass: RenderPass { strokeRenderPass.graphicDescriptor = descriptor strokeRenderPass.graphicPipelineState = graphicPipelineState strokeRenderPass.draw(on: canvas, with: renderer) - - if let stroke = stroke as? PenStroke, !stroke.isEmptyErasedQuads { - descriptor.colorAttachments[0].loadAction = .load - eraserRenderPass.stroke = stroke - eraserRenderPass.descriptor = descriptor - eraserRenderPass.draw(on: canvas, with: renderer) - } } case .photo(let photo): photoRenderPass.photo = photo diff --git a/Memola/Canvas/RenderPasses/StrokeRenderPass.swift b/Memola/Canvas/RenderPasses/StrokeRenderPass.swift index 55c2e13..d5fa1be 100644 --- a/Memola/Canvas/RenderPasses/StrokeRenderPass.swift +++ b/Memola/Canvas/RenderPasses/StrokeRenderPass.swift @@ -21,6 +21,8 @@ class StrokeRenderPass: RenderPass { var stroke: (any Stroke)? var strokeTexture: MTLTexture? + weak var eraserRenderPass: EraserRenderPass? + init(renderer: Renderer) { descriptor = MTLRenderPassDescriptor() strokePipelineState = PipelineStates.createStrokePipelineState(from: renderer) @@ -57,6 +59,13 @@ class StrokeRenderPass: RenderPass { renderEncoder.endEncoding() commandBuffer.commit() + if let eraserRenderPass, let stroke = stroke as? PenStroke, !stroke.isEmptyErasedQuads { + descriptor.colorAttachments[0].loadAction = .load + eraserRenderPass.stroke = stroke + eraserRenderPass.descriptor = descriptor + eraserRenderPass.draw(on: canvas, with: renderer) + } + drawStrokeTexture(on: canvas, with: renderer) }