diff --git a/wlx-overlay-s/src/backend/openxr/mod.rs b/wlx-overlay-s/src/backend/openxr/mod.rs index 2dd8ccd..01e411e 100644 --- a/wlx-overlay-s/src/backend/openxr/mod.rs +++ b/wlx-overlay-s/src/backend/openxr/mod.rs @@ -2,8 +2,8 @@ use std::{ collections::VecDeque, ops::Add, sync::{ - atomic::{AtomicBool, AtomicUsize, Ordering}, Arc, + atomic::{AtomicBool, AtomicUsize, Ordering}, }, time::{Duration, Instant}, }; @@ -24,10 +24,10 @@ use crate::{ overlay::{OverlayData, ShouldRender}, task::{SystemTask, TaskType}, }, - graphics::{init_openxr_graphics, CommandBuffers}, + graphics::{CommandBuffers, init_openxr_graphics}, overlays::{ toast::{Toast, ToastTopic}, - watch::{watch_fade, WATCH_NAME}, + watch::{WATCH_NAME, watch_fade}, }, state::AppState, }; diff --git a/wlx-overlay-s/src/backend/openxr/overlay.rs b/wlx-overlay-s/src/backend/openxr/overlay.rs index ff153b0..212b4df 100644 --- a/wlx-overlay-s/src/backend/openxr/overlay.rs +++ b/wlx-overlay-s/src/backend/openxr/overlay.rs @@ -3,10 +3,10 @@ use openxr::{self as xr, CompositionLayerFlags}; use std::f32::consts::PI; use xr::EyeVisibility; -use super::{helpers, swapchain::WlxSwapchain, CompositionLayer, XrState}; +use super::{CompositionLayer, XrState, helpers, swapchain::WlxSwapchain}; use crate::{ backend::{ - openxr::swapchain::{create_swapchain, SwapchainOpts}, + openxr::swapchain::{SwapchainOpts, create_swapchain}, overlay::OverlayData, }, state::AppState, @@ -27,10 +27,6 @@ impl OverlayData { app: &AppState, xr: &'a XrState, ) -> anyhow::Result { - if self.data.swapchain.is_some() { - return Ok(true); - } - let Some(meta) = self.frame_meta() else { log::warn!( "{}: swapchain cannot be created due to missing metadata", @@ -39,11 +35,25 @@ impl OverlayData { return Ok(false); }; - let extent = meta.extent; + if self + .data + .swapchain + .as_ref() + .is_some_and(|s| s.extent == meta.extent) + { + return Ok(true); + } + + log::debug!( + "{}: recreating swapchain at {}x{}", + self.state.name, + meta.extent[0], + meta.extent[1], + ); self.data.swapchain = Some(create_swapchain( xr, app.gfx.clone(), - extent, + meta.extent, SwapchainOpts::new(), )?); Ok(true)