chore: add photo background render pass

This commit is contained in:
dscyrescotti
2024-06-23 16:27:06 +07:00
parent 6c8d0ea9b6
commit 96bf8056a9
3 changed files with 19 additions and 12 deletions

View File

@@ -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
}
}

View File

@@ -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()
}
}

View File

@@ -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)