wvr_server: fix mouse cursor not rendering on the very top layer

This commit is contained in:
galister 2026-07-05 01:39:15 +09:00
parent dbda3de755
commit 0abebddffe
2 changed files with 40 additions and 15 deletions

View File

@ -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<ImageView>,
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(&current.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(())

View File

@ -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;