mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-05-18 13:47:04 +02:00
chore: add photo background render pass
This commit is contained in:
@@ -97,6 +97,10 @@ class GraphicRenderPass: RenderPass {
|
|||||||
photoRenderPass?.elementGroup = elementGroup
|
photoRenderPass?.elementGroup = elementGroup
|
||||||
photoRenderPass?.descriptor = descriptor
|
photoRenderPass?.descriptor = descriptor
|
||||||
photoRenderPass?.draw(into: commandBuffer, on: canvas, with: renderer)
|
photoRenderPass?.draw(into: commandBuffer, on: canvas, with: renderer)
|
||||||
|
|
||||||
|
photoBackgroundRenderPass?.elementGroup = elementGroup
|
||||||
|
photoBackgroundRenderPass?.clearsTexture = clearsTexture
|
||||||
|
photoBackgroundRenderPass?.draw(into: commandBuffer, on: canvas, with: renderer)
|
||||||
clearsTexture = false
|
clearsTexture = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class PhotoBackgroundRenderPass: RenderPass {
|
|||||||
var photoBackgroundTexture: MTLTexture?
|
var photoBackgroundTexture: MTLTexture?
|
||||||
|
|
||||||
var photo: Photo?
|
var photo: Photo?
|
||||||
|
var elementGroup: ElementGroup?
|
||||||
|
|
||||||
var clearsTexture: Bool = true
|
var clearsTexture: Bool = true
|
||||||
|
|
||||||
@@ -31,10 +32,7 @@ class PhotoBackgroundRenderPass: RenderPass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func draw(into commandBuffer: any MTLCommandBuffer, on canvas: Canvas, with renderer: Renderer) {
|
func draw(into commandBuffer: any MTLCommandBuffer, on canvas: Canvas, with renderer: Renderer) {
|
||||||
|
guard let elementGroup else { return }
|
||||||
}
|
|
||||||
|
|
||||||
func draw(on canvas: Canvas, with renderer: Renderer) {
|
|
||||||
guard let descriptor else { return }
|
guard let descriptor else { return }
|
||||||
|
|
||||||
descriptor.colorAttachments[0].texture = photoBackgroundTexture
|
descriptor.colorAttachments[0].texture = photoBackgroundTexture
|
||||||
@@ -42,20 +40,25 @@ class PhotoBackgroundRenderPass: RenderPass {
|
|||||||
descriptor.colorAttachments[0].loadAction = clearsTexture ? .clear : .load
|
descriptor.colorAttachments[0].loadAction = clearsTexture ? .clear : .load
|
||||||
descriptor.colorAttachments[0].clearColor = MTLClearColor(red: 1, green: 1, blue: 1, alpha: 0)
|
descriptor.colorAttachments[0].clearColor = MTLClearColor(red: 1, green: 1, blue: 1, alpha: 0)
|
||||||
|
|
||||||
guard let commandBuffer = renderer.commandQueue.makeCommandBuffer() else { return }
|
guard !elementGroup.isEmpty else { return }
|
||||||
commandBuffer.label = "Photo Background Command Buffer"
|
|
||||||
|
let photos = elementGroup.elements.compactMap { element -> Photo? in
|
||||||
|
guard case .photo(let photo) = element else { return nil }
|
||||||
|
return photo
|
||||||
|
}
|
||||||
|
|
||||||
guard let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) else { return }
|
guard let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) else { return }
|
||||||
renderEncoder.label = label
|
renderEncoder.label = "Photo Background Render Encoder"
|
||||||
|
|
||||||
guard let photoBackgroundPipelineState else { return }
|
guard let photoBackgroundPipelineState else { return }
|
||||||
renderEncoder.setRenderPipelineState(photoBackgroundPipelineState)
|
renderEncoder.setRenderPipelineState(photoBackgroundPipelineState)
|
||||||
|
|
||||||
canvas.setUniformsBuffer(device: renderer.device, renderEncoder: renderEncoder)
|
canvas.setUniformsBuffer(device: renderer.device, renderEncoder: renderEncoder)
|
||||||
photo?.draw(device: renderer.device, renderEncoder: renderEncoder)
|
|
||||||
|
for photo in photos {
|
||||||
|
photo.draw(device: renderer.device, renderEncoder: renderEncoder)
|
||||||
|
}
|
||||||
|
|
||||||
renderEncoder.endEncoding()
|
renderEncoder.endEncoding()
|
||||||
commandBuffer.commit()
|
|
||||||
commandBuffer.waitUntilCompleted()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class PhotoRenderPass: RenderPass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
guard let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) else { return }
|
guard let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) else { return }
|
||||||
renderEncoder.label = label
|
renderEncoder.label = "Photo Render Encoder"
|
||||||
|
|
||||||
guard let photoPipelineState else { return }
|
guard let photoPipelineState else { return }
|
||||||
renderEncoder.setRenderPipelineState(photoPipelineState)
|
renderEncoder.setRenderPipelineState(photoPipelineState)
|
||||||
|
|||||||
Reference in New Issue
Block a user