From 2f544868ef7ab1d6b8e131d1cc3857afaa8c0a73 Mon Sep 17 00:00:00 2001 From: Isse Date: Sun, 28 Jan 2024 08:58:57 +0100 Subject: [PATCH] various fixes - Renames `Drawer::view` to `Drawer::surface_view`. - Only set present mode if it's supported in `set_render_mode`. - Don't create view in `Drawer::drop`. - Format changes. --- voxygen/src/render/renderer.rs | 16 +++++----------- voxygen/src/render/renderer/drawer.rs | 20 +++++++------------- voxygen/src/window.rs | 3 ++- 3 files changed, 14 insertions(+), 25 deletions(-) diff --git a/voxygen/src/render/renderer.rs b/voxygen/src/render/renderer.rs index d471675084..e07d5157c8 100644 --- a/voxygen/src/render/renderer.rs +++ b/voxygen/src/render/renderer.rs @@ -185,6 +185,7 @@ pub struct Renderer { /// The texture format used for the intermediate rendering passes intermediate_format: wgpu::TextureFormat, + /// Supported present modes. present_modes: Vec, } @@ -649,17 +650,10 @@ impl Renderer { if self.other_modes != other_modes { self.other_modes = other_modes; - // Update present mode in swap chain descriptor - self.surface_config.present_mode = - if self.present_modes.contains(&self.other_modes.present_mode) { - self.other_modes.present_mode - } else { - *self - .present_modes - .first() - .expect("There should never be no supported present modes") - } - .into(); + // Update present mode in swap chain descriptor if it is supported. + if self.present_modes.contains(&self.other_modes.present_mode) { + self.surface_config.present_mode = self.other_modes.present_mode.into() + } // Only enable profiling if the wgpu features are enabled self.other_modes.profiler_enabled &= self.profiler_features_enabled; diff --git a/voxygen/src/render/renderer/drawer.rs b/voxygen/src/render/renderer/drawer.rs index f16c4d683a..a00c5b8940 100644 --- a/voxygen/src/render/renderer/drawer.rs +++ b/voxygen/src/render/renderer/drawer.rs @@ -87,7 +87,7 @@ struct RendererBorrow<'frame> { } pub struct Drawer<'frame> { - view: wgpu::TextureView, + surface_view: wgpu::TextureView, encoder: Option>, borrow: RendererBorrow<'frame>, surface_texture: Option, @@ -143,7 +143,7 @@ impl<'frame> Drawer<'frame> { ManualOwningScope::start("frame", &mut renderer.profiler, encoder, borrow.device); // Create a view to the surface texture. - let view = surface_texture + let surface_view = surface_texture .texture .create_view(&wgpu::TextureViewDescriptor { label: Some("Surface texture view"), @@ -151,7 +151,7 @@ impl<'frame> Drawer<'frame> { }); Self { - view, + surface_view, encoder: Some(encoder), borrow, surface_texture: Some(surface_texture), @@ -514,6 +514,7 @@ impl<'frame> Drawer<'frame> { /// to complete any pending image uploads for the UI. pub fn third_pass(&mut self) -> ThirdPassDrawer { self.run_ui_premultiply_passes(); + let encoder = self.encoder.as_mut().unwrap(); let device = self.borrow.device; let mut render_pass = @@ -525,7 +526,7 @@ impl<'frame> Drawer<'frame> { view: self .taking_screenshot .as_ref() - .map_or(&self.view, |s| s.texture_view()), + .map_or(&self.surface_view, |s| s.texture_view()), resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), @@ -580,7 +581,7 @@ impl<'frame> Drawer<'frame> { self.encoder.as_mut().unwrap(), self.taking_screenshot .as_ref() - .map_or(&self.view, |s| s.texture_view()), + .map_or(&self.surface_view, |s| s.texture_view()), &paint_jobs, &screen_descriptor, None, @@ -754,13 +755,6 @@ impl<'frame> Drop for Drawer<'frame> { .take() .zip(self.borrow.pipelines.blit()) .map(|(screenshot, blit)| { - let view = self.surface_texture.as_ref().unwrap().texture.create_view( - &wgpu::TextureViewDescriptor { - label: Some("Surface texture view"), - ..Default::default() - }, - ); - // Image needs to be copied from the screenshot texture to the swapchain texture let mut render_pass = encoder.scoped_render_pass( "screenshot blit", @@ -768,7 +762,7 @@ impl<'frame> Drop for Drawer<'frame> { &wgpu::RenderPassDescriptor { label: Some("Blit screenshot pass"), color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &view, + view: &self.surface_view, resolve_target: None, ops: wgpu::Operations { load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), diff --git a/voxygen/src/window.rs b/voxygen/src/window.rs index c79a23d6b6..e73a74a394 100644 --- a/voxygen/src/window.rs +++ b/voxygen/src/window.rs @@ -1039,9 +1039,10 @@ impl Window { pub fn is_cursor_grabbed(&self) -> bool { self.cursor_grabbed } pub fn grab_cursor(&mut self, grab: bool) { + use winit::window::CursorGrabMode; + self.cursor_grabbed = grab; self.window.set_cursor_visible(!grab); - use winit::window::CursorGrabMode; let res = if grab { self.window .set_cursor_grab(CursorGrabMode::Locked)