From c05c1dc1191f1ba74d480a748c6fffeb17b56c4b Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Tue, 1 Dec 2020 20:25:31 -0800 Subject: [PATCH] hidpi swap chains (#973) hidpi swap chains --- .../src/render_graph/nodes/window_texture_node.rs | 4 ++-- crates/bevy_wgpu/src/wgpu_type_converter.rs | 4 ++-- crates/bevy_window/src/window.rs | 8 ++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) 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 dc6ee403f3..e3a4d79409 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 9258c03a5f..d1e5d4f996 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 9ce9917948..9501ef3d26 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