From 6a3b60f29859bcb7a7a44ef88f07572f3c742915 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Tue, 20 Aug 2024 13:54:06 +0900 Subject: [PATCH] feat: screen_render_down --- src/config.rs | 3 +++ src/overlays/screen.rs | 19 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/config.rs b/src/config.rs index f4c783d2..a494e902 100644 --- a/src/config.rs +++ b/src/config.rs @@ -260,6 +260,9 @@ pub struct GeneralConfig { #[serde(default = "def_max_height")] pub screen_max_height: u16, + + #[serde(default = "def_false")] + pub screen_render_down: bool, } impl GeneralConfig { diff --git a/src/overlays/screen.rs b/src/overlays/screen.rs index 6aa07855..2a087bf6 100644 --- a/src/overlays/screen.rs +++ b/src/overlays/screen.rs @@ -471,9 +471,22 @@ impl OverlayRenderer for ScreenRenderer { }); match app.graphics.dmabuf_texture(frame) { Ok(new) => { - let view = ImageView::new_default(new.clone())?; - - self.last_view = Some(view); + let pipeline = match self.pipeline { + Some(ref mut p) => Some(p), + None if app.session.config.screen_render_down => { + let pipeline = ScreenPipeline::new(&self.extent.unwrap(), app)?; // safe + self.last_view = Some(pipeline.view.clone()); + self.pipeline = Some(pipeline); + self.pipeline.as_mut() + } + None => None, + }; + if let Some(pipeline) = pipeline { + pipeline.render(new.clone(), None, app)?; + } else { + let view = ImageView::new_default(new.clone())?; + self.last_view = Some(view); + } } Err(e) => { log::error!(