mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-07-10 14:52:46 +02: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) {
|
func draw(in view: MTKView, on canvas: Canvas) {
|
||||||
if !updatesViewPort {
|
if !updatesViewPort {
|
||||||
|
strokeRenderPass.eraserRenderPass = eraserRenderPass
|
||||||
graphicRenderPass.photoRenderPass = photoRenderPass
|
graphicRenderPass.photoRenderPass = photoRenderPass
|
||||||
graphicRenderPass.strokeRenderPass = strokeRenderPass
|
graphicRenderPass.strokeRenderPass = strokeRenderPass
|
||||||
graphicRenderPass.eraserRenderPass = eraserRenderPass
|
graphicRenderPass.eraserRenderPass = eraserRenderPass
|
||||||
|
|||||||
@@ -67,13 +67,6 @@ class GraphicRenderPass: RenderPass {
|
|||||||
strokeRenderPass.graphicDescriptor = descriptor
|
strokeRenderPass.graphicDescriptor = descriptor
|
||||||
strokeRenderPass.graphicPipelineState = graphicPipelineState
|
strokeRenderPass.graphicPipelineState = graphicPipelineState
|
||||||
strokeRenderPass.draw(on: canvas, with: renderer)
|
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):
|
case .photo(let photo):
|
||||||
descriptor.colorAttachments[0].loadAction = clearsTexture ? .clear : .load
|
descriptor.colorAttachments[0].loadAction = clearsTexture ? .clear : .load
|
||||||
@@ -103,13 +96,6 @@ class GraphicRenderPass: RenderPass {
|
|||||||
strokeRenderPass.graphicDescriptor = descriptor
|
strokeRenderPass.graphicDescriptor = descriptor
|
||||||
strokeRenderPass.graphicPipelineState = graphicPipelineState
|
strokeRenderPass.graphicPipelineState = graphicPipelineState
|
||||||
strokeRenderPass.draw(on: canvas, with: renderer)
|
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):
|
case .photo(let photo):
|
||||||
photoRenderPass.photo = photo
|
photoRenderPass.photo = photo
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ class StrokeRenderPass: RenderPass {
|
|||||||
var stroke: (any Stroke)?
|
var stroke: (any Stroke)?
|
||||||
var strokeTexture: MTLTexture?
|
var strokeTexture: MTLTexture?
|
||||||
|
|
||||||
|
weak var eraserRenderPass: EraserRenderPass?
|
||||||
|
|
||||||
init(renderer: Renderer) {
|
init(renderer: Renderer) {
|
||||||
descriptor = MTLRenderPassDescriptor()
|
descriptor = MTLRenderPassDescriptor()
|
||||||
strokePipelineState = PipelineStates.createStrokePipelineState(from: renderer)
|
strokePipelineState = PipelineStates.createStrokePipelineState(from: renderer)
|
||||||
@@ -57,6 +59,13 @@ class StrokeRenderPass: RenderPass {
|
|||||||
renderEncoder.endEncoding()
|
renderEncoder.endEncoding()
|
||||||
commandBuffer.commit()
|
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)
|
drawStrokeTexture(on: canvas, with: renderer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user