recreate swapchain on size change

This commit is contained in:
galister
2025-06-18 19:23:44 +09:00
parent 66ac622136
commit 467b0cc33d
2 changed files with 21 additions and 11 deletions

View File

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

View File

@@ -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<OpenXrOverlayData> {
app: &AppState,
xr: &'a XrState,
) -> anyhow::Result<bool> {
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<OpenXrOverlayData> {
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)