feat: exclude graphic texture if there is no elements in visible frame of canvas

This commit is contained in:
dscyrescotti
2024-06-27 11:24:26 +07:00
parent 78e14c65aa
commit 307d818993
2 changed files with 10 additions and 4 deletions
+1
View File
@@ -101,6 +101,7 @@ final class Renderer {
viewPortRenderPass.descriptor = view.currentRenderPassDescriptor viewPortRenderPass.descriptor = view.currentRenderPassDescriptor
viewPortRenderPass.excludesPhotoBackground = photoBackgroundRenderPass.clearsTexture viewPortRenderPass.excludesPhotoBackground = photoBackgroundRenderPass.clearsTexture
viewPortRenderPass.excludesGraphic = cacheRenderPass.clearsTexture
viewPortRenderPass.photoBackgroundTexture = photoBackgroundRenderPass.photoBackgroundTexture viewPortRenderPass.photoBackgroundTexture = photoBackgroundRenderPass.photoBackgroundTexture
viewPortRenderPass.cacheTexture = cacheRenderPass.cacheTexture viewPortRenderPass.cacheTexture = cacheRenderPass.cacheTexture
viewPortRenderPass.draw(into: commandBuffer, on: canvas, with: self) viewPortRenderPass.draw(into: commandBuffer, on: canvas, with: self)
@@ -22,6 +22,7 @@ class ViewPortRenderPass: RenderPass {
weak var view: MTKView? weak var view: MTKView?
var excludesGraphic: Bool = false
var excludesPhotoBackground: Bool = false var excludesPhotoBackground: Bool = false
init(renderer: Renderer) { init(renderer: Renderer) {
@@ -68,8 +69,10 @@ class ViewPortRenderPass: RenderPass {
canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder) canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder)
} }
renderEncoder.setFragmentTexture(cacheTexture, index: 0) if !excludesGraphic {
canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder) renderEncoder.setFragmentTexture(cacheTexture, index: 0)
canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder)
}
} else { } else {
guard let viewPortPipelineState else { guard let viewPortPipelineState else {
return false return false
@@ -82,8 +85,10 @@ class ViewPortRenderPass: RenderPass {
canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder) canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder)
} }
renderEncoder.setFragmentTexture(cacheTexture, index: 0) if !excludesGraphic {
canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder) renderEncoder.setFragmentTexture(cacheTexture, index: 0)
canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder)
}
} }
renderEncoder.endEncoding() renderEncoder.endEncoding()