From 307d818993123841ad4adebd0633ed4440365b89 Mon Sep 17 00:00:00 2001 From: dscyrescotti Date: Thu, 27 Jun 2024 11:24:26 +0700 Subject: [PATCH] feat: exclude graphic texture if there is no elements in visible frame of canvas --- Memola/Canvas/Core/Renderer.swift | 1 + Memola/Canvas/RenderPasses/ViewPortRenderPass.swift | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Memola/Canvas/Core/Renderer.swift b/Memola/Canvas/Core/Renderer.swift index 161f0d7..0f143f3 100644 --- a/Memola/Canvas/Core/Renderer.swift +++ b/Memola/Canvas/Core/Renderer.swift @@ -101,6 +101,7 @@ final class Renderer { viewPortRenderPass.descriptor = view.currentRenderPassDescriptor viewPortRenderPass.excludesPhotoBackground = photoBackgroundRenderPass.clearsTexture + viewPortRenderPass.excludesGraphic = cacheRenderPass.clearsTexture viewPortRenderPass.photoBackgroundTexture = photoBackgroundRenderPass.photoBackgroundTexture viewPortRenderPass.cacheTexture = cacheRenderPass.cacheTexture viewPortRenderPass.draw(into: commandBuffer, on: canvas, with: self) diff --git a/Memola/Canvas/RenderPasses/ViewPortRenderPass.swift b/Memola/Canvas/RenderPasses/ViewPortRenderPass.swift index dd4f79a..d939bb1 100644 --- a/Memola/Canvas/RenderPasses/ViewPortRenderPass.swift +++ b/Memola/Canvas/RenderPasses/ViewPortRenderPass.swift @@ -22,6 +22,7 @@ class ViewPortRenderPass: RenderPass { weak var view: MTKView? + var excludesGraphic: Bool = false var excludesPhotoBackground: Bool = false init(renderer: Renderer) { @@ -68,8 +69,10 @@ class ViewPortRenderPass: RenderPass { canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder) } - renderEncoder.setFragmentTexture(cacheTexture, index: 0) - canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder) + if !excludesGraphic { + renderEncoder.setFragmentTexture(cacheTexture, index: 0) + canvas.renderViewPortUpdate(device: renderer.device, renderEncoder: renderEncoder) + } } else { guard let viewPortPipelineState else { return false @@ -82,8 +85,10 @@ class ViewPortRenderPass: RenderPass { canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder) } - renderEncoder.setFragmentTexture(cacheTexture, index: 0) - canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder) + if !excludesGraphic { + renderEncoder.setFragmentTexture(cacheTexture, index: 0) + canvas.renderViewPort(device: renderer.device, renderEncoder: renderEncoder) + } } renderEncoder.endEncoding()