From 288ce0406027a648d334ecadff8e7d9698ca9b67 Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Thu, 26 Mar 2026 15:53:15 -0700 Subject: [PATCH] graphics: fix fullscreen --- engine/graphics/src/surface.rs | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/engine/graphics/src/surface.rs b/engine/graphics/src/surface.rs index 16f0dfc3..ee2be95f 100644 --- a/engine/graphics/src/surface.rs +++ b/engine/graphics/src/surface.rs @@ -39,23 +39,18 @@ impl<'window> Surface<'window>{ } #[must_use] pub fn new_frame(&self,device:&wgpu::Device)->Result{ - let frame=match self.surface.get_current_texture(){ - wgpu::CurrentSurfaceTexture::Success(surface_texture)=>surface_texture, - wgpu::CurrentSurfaceTexture::Suboptimal(surface_texture)=>{ - self.surface.configure(device,&self.config); - surface_texture - }, - wgpu::CurrentSurfaceTexture::Outdated=>{ - self.surface.configure(device,&self.config); - match self.surface.get_current_texture(){ - wgpu::CurrentSurfaceTexture::Success(surface_texture)=>surface_texture, - _=>panic!("Failed to acquire next surface texture!"), - } - } - wgpu::CurrentSurfaceTexture::Timeout - |wgpu::CurrentSurfaceTexture::Occluded=>return Err(FrameError::Skip), - wgpu::CurrentSurfaceTexture::Lost=>return Err(FrameError::DeviceLost), - wgpu::CurrentSurfaceTexture::Validation=>unreachable!(), + let frame=loop{ + match self.surface.get_current_texture(){ + wgpu::CurrentSurfaceTexture::Success(surface_texture)=>break surface_texture, + // Suboptimal -> surface_texture must be dropped and surface reconfigured + wgpu::CurrentSurfaceTexture::Suboptimal(_) + |wgpu::CurrentSurfaceTexture::Outdated=>{}, + wgpu::CurrentSurfaceTexture::Timeout + |wgpu::CurrentSurfaceTexture::Occluded=>return Err(FrameError::Skip), + wgpu::CurrentSurfaceTexture::Lost=>return Err(FrameError::DeviceLost), + wgpu::CurrentSurfaceTexture::Validation=>unreachable!(), + }; + self.surface.configure(device,&self.config); }; let view=frame.texture.create_view(&wgpu::TextureViewDescriptor{ format:Some(self.config.view_formats[0]),