mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-03-25 10:51:41 +01:00
feat: embed eraser stroke into stroke texture
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user