mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-05-11 10:20: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?.descriptor = descriptor
|
||||
photoRenderPass?.draw(into: commandBuffer, on: canvas, with: renderer)
|
||||
|
||||
photoBackgroundRenderPass?.elementGroup = elementGroup
|
||||
photoBackgroundRenderPass?.clearsTexture = clearsTexture
|
||||
photoBackgroundRenderPass?.draw(into: commandBuffer, on: canvas, with: renderer)
|
||||
clearsTexture = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ class PhotoBackgroundRenderPass: RenderPass {
|
||||
var photoBackgroundTexture: MTLTexture?
|
||||
|
||||
var photo: Photo?
|
||||
var elementGroup: ElementGroup?
|
||||
|
||||
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(on canvas: Canvas, with renderer: Renderer) {
|
||||
guard let elementGroup else { return }
|
||||
guard let descriptor else { return }
|
||||
|
||||
descriptor.colorAttachments[0].texture = photoBackgroundTexture
|
||||
@@ -42,20 +40,25 @@ class PhotoBackgroundRenderPass: RenderPass {
|
||||
descriptor.colorAttachments[0].loadAction = clearsTexture ? .clear : .load
|
||||
descriptor.colorAttachments[0].clearColor = MTLClearColor(red: 1, green: 1, blue: 1, alpha: 0)
|
||||
|
||||
guard let commandBuffer = renderer.commandQueue.makeCommandBuffer() else { return }
|
||||
commandBuffer.label = "Photo Background Command Buffer"
|
||||
guard !elementGroup.isEmpty else { return }
|
||||
|
||||
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 }
|
||||
renderEncoder.label = label
|
||||
renderEncoder.label = "Photo Background Render Encoder"
|
||||
|
||||
guard let photoBackgroundPipelineState else { return }
|
||||
renderEncoder.setRenderPipelineState(photoBackgroundPipelineState)
|
||||
|
||||
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()
|
||||
commandBuffer.commit()
|
||||
commandBuffer.waitUntilCompleted()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,9 +34,9 @@ class PhotoRenderPass: RenderPass {
|
||||
guard case .photo(let photo) = element else { return nil }
|
||||
return photo
|
||||
}
|
||||
|
||||
|
||||
guard let renderEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) else { return }
|
||||
renderEncoder.label = label
|
||||
renderEncoder.label = "Photo Render Encoder"
|
||||
|
||||
guard let photoPipelineState else { return }
|
||||
renderEncoder.setRenderPipelineState(photoPipelineState)
|
||||
|
||||
Reference in New Issue
Block a user