diff --git a/wayvr/src/overlays/screen/capture.rs b/wayvr/src/overlays/screen/capture.rs index a2e6b749..8f6a0931 100644 --- a/wayvr/src/overlays/screen/capture.rs +++ b/wayvr/src/overlays/screen/capture.rs @@ -215,6 +215,19 @@ impl ScreenPipeline { mouse: Option<&MouseMeta>, app: &mut AppState, rdr: &mut RenderResources, + ) -> anyhow::Result<()> { + self.render_screen(image, app, rdr)?; + if let Some(mouse) = mouse { + self.render_mouse(mouse, rdr)?; + } + Ok(()) + } + + pub fn render_screen( + &mut self, + image: Arc, + app: &mut AppState, + rdr: &mut RenderResources, ) -> anyhow::Result<()> { self.ensure_depth(app, rdr.cmd_bufs.len())?; @@ -226,23 +239,31 @@ impl ScreenPipeline { .update_sampler(0, image.clone(), app.gfx.texture_filter)?; cmd_buf.run_ref(¤t.pass)?; + } - if let Some(mouse) = mouse.as_ref() { - let size = CURSOR_SIZE * self.extentf[1]; - let half_size = size * 0.5; + Ok(()) + } - upload_quad_vertices( - &mut self.mouse.buf_vert, - self.extentf[0], - self.extentf[1], - mouse.x.mul_add(self.extentf[0], -half_size), - mouse.y.mul_add(self.extentf[1], -half_size), - size, - size, - )?; + pub fn render_mouse( + &mut self, + mouse: &MouseMeta, + rdr: &mut RenderResources, + ) -> anyhow::Result<()> { + for cmd_buf in rdr.cmd_bufs.iter_mut() { + let size = CURSOR_SIZE * self.extentf[1]; + let half_size = size * 0.5; - cmd_buf.run_ref(&self.mouse.pass)?; - } + upload_quad_vertices( + &mut self.mouse.buf_vert, + self.extentf[0], + self.extentf[1], + mouse.x.mul_add(self.extentf[0], -half_size), + mouse.y.mul_add(self.extentf[1], -half_size), + size, + size, + )?; + + cmd_buf.run_ref(&self.mouse.pass)?; } Ok(()) diff --git a/wayvr/src/overlays/wayvr.rs b/wayvr/src/overlays/wayvr.rs index 3ce555ba..1912f872 100644 --- a/wayvr/src/overlays/wayvr.rs +++ b/wayvr/src/overlays/wayvr.rs @@ -645,7 +645,7 @@ impl OverlayBackend for WvrWindowBackend { self.pipeline .as_mut() .unwrap() - .render(image, self.mouse.as_ref(), app, rdr)?; + .render_screen(image, app, rdr)?; for surface in &self.surfaces { self.render_subsurface(app, rdr, surface)?; @@ -657,6 +657,10 @@ impl OverlayBackend for WvrWindowBackend { callback_surfaces.push(&popup.surface_id); } + if let Some(mouse) = self.mouse.as_ref() { + self.pipeline.as_mut().unwrap().render_mouse(mouse, rdr)?; + } + // frame callbacks for toplevel + subsurf + popup if let Some(wvr_server) = app.wvr_server.as_mut() { let state = &mut wvr_server.manager.state;