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!(