diff --git a/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs b/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs index dc6ee403f3ed8..e3a4d79409b12 100644 --- a/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/window_texture_node.rs @@ -68,8 +68,8 @@ impl Node for WindowTextureNode { render_resource_context.remove_texture(old_texture); } - self.descriptor.size.width = window.width(); - self.descriptor.size.height = window.height(); + self.descriptor.size.width = window.scaled_width(); + self.descriptor.size.height = window.scaled_height(); let texture_resource = render_resource_context.create_texture(self.descriptor); output.set(WINDOW_TEXTURE, RenderResourceId::Texture(texture_resource)); } diff --git a/crates/bevy_wgpu/src/wgpu_type_converter.rs b/crates/bevy_wgpu/src/wgpu_type_converter.rs index 9258c03a5fd27..d1e5d4f996199 100644 --- a/crates/bevy_wgpu/src/wgpu_type_converter.rs +++ b/crates/bevy_wgpu/src/wgpu_type_converter.rs @@ -564,8 +564,8 @@ impl WgpuFrom<&Window> for wgpu::SwapChainDescriptor { wgpu::SwapChainDescriptor { usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT, format: TextureFormat::default().wgpu_into(), - width: window.width(), - height: window.height(), + width: window.scaled_width(), + height: window.scaled_height(), present_mode: if window.vsync() { wgpu::PresentMode::Mailbox } else { diff --git a/crates/bevy_window/src/window.rs b/crates/bevy_window/src/window.rs index 9ce9917948417..9501ef3d2626e 100644 --- a/crates/bevy_window/src/window.rs +++ b/crates/bevy_window/src/window.rs @@ -125,6 +125,14 @@ impl Window { self.width } + pub fn scaled_width(&self) -> u32 { + (self.width as f64 * self.scale_factor) as u32 + } + + pub fn scaled_height(&self) -> u32 { + (self.height as f64 * self.scale_factor) as u32 + } + #[inline] pub fn height(&self) -> u32 { self.height