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.
This commit is contained in:
Isse 2024-01-28 08:58:57 +01:00 committed by Marcel Märtens
parent 6d45d21d95
commit 2f544868ef
3 changed files with 14 additions and 25 deletions

View File

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

View File

@ -87,7 +87,7 @@ struct RendererBorrow<'frame> {
}
pub struct Drawer<'frame> {
view: wgpu::TextureView,
surface_view: wgpu::TextureView,
encoder: Option<ManualOwningScope<'frame, wgpu::CommandEncoder>>,
borrow: RendererBorrow<'frame>,
surface_texture: Option<wgpu::SurfaceTexture>,
@ -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),

View File

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