diff options
author | 2020-02-08 20:02:31 +0100 | |
---|---|---|
committer | 2020-02-08 20:02:31 +0100 | |
commit | 95880ca74bddb6a23774621ef766b91956d40a61 (patch) | |
tree | be7cb1428c877a58c50abb843dc1964f7a012c48 /wgpu | |
parent | 4e9e051caaf76e2c76aaa79c2463409a8280265f (diff) | |
parent | 8e4741ad778e227628d36dcfc748c5cdc23310f3 (diff) | |
download | iced-95880ca74bddb6a23774621ef766b91956d40a61.tar.gz iced-95880ca74bddb6a23774621ef766b91956d40a61.tar.bz2 iced-95880ca74bddb6a23774621ef766b91956d40a61.zip |
Merge pull request #181 from Imberflur/improvement/update-winit
Update `winit` to `0.21`
Diffstat (limited to 'wgpu')
-rw-r--r-- | wgpu/src/renderer.rs | 44 | ||||
-rw-r--r-- | wgpu/src/renderer/target.rs | 36 | ||||
-rw-r--r-- | wgpu/src/transformation.rs | 6 |
3 files changed, 46 insertions, 40 deletions
diff --git a/wgpu/src/renderer.rs b/wgpu/src/renderer.rs index 6f35e247..93d2bb13 100644 --- a/wgpu/src/renderer.rs +++ b/wgpu/src/renderer.rs @@ -92,7 +92,7 @@ impl Renderer { log::debug!("Drawing"); let (width, height) = target.dimensions(); - let dpi = target.dpi(); + let scale_factor = target.scale_factor(); let transformation = target.transformation(); let frame = target.next_frame(); @@ -132,7 +132,13 @@ impl Renderer { self.draw_overlay(overlay, &mut layers); for layer in layers { - self.flush(dpi, transformation, &layer, &mut encoder, &frame.view); + self.flush( + scale_factor, + transformation, + &layer, + &mut encoder, + &frame.view, + ); } self.queue.submit(&[encoder.finish()]); @@ -330,19 +336,19 @@ impl Renderer { fn flush( &mut self, - dpi: f32, + scale_factor: f32, transformation: Transformation, layer: &Layer<'_>, encoder: &mut wgpu::CommandEncoder, target: &wgpu::TextureView, ) { - let bounds = layer.bounds * dpi; + let bounds = layer.bounds * scale_factor; if layer.meshes.len() > 0 { let translated = transformation * Transformation::translate( - -(layer.offset.x as f32) * dpi, - -(layer.offset.y as f32) * dpi, + -(layer.offset.x as f32) * scale_factor, + -(layer.offset.y as f32) * scale_factor, ); self.triangle_pipeline.draw( @@ -350,7 +356,7 @@ impl Renderer { encoder, target, translated, - dpi, + scale_factor, &layer.meshes, bounds, ); @@ -362,7 +368,7 @@ impl Renderer { encoder, &layer.quads, transformation, - dpi, + scale_factor, bounds, target, ); @@ -370,7 +376,7 @@ impl Renderer { if layer.images.len() > 0 { let translated_and_scaled = transformation - * Transformation::scale(dpi, dpi) + * Transformation::scale(scale_factor, scale_factor) * Transformation::translate( -(layer.offset.x as f32), -(layer.offset.y as f32), @@ -383,7 +389,7 @@ impl Renderer { translated_and_scaled, bounds, target, - dpi, + scale_factor, ); } @@ -396,25 +402,25 @@ impl Renderer { // bit "jumpy". We may be able to do better once we improve // our text rendering/caching pipeline. screen_position: ( - (text.screen_position.0 * dpi).round(), - (text.screen_position.1 * dpi).round(), + (text.screen_position.0 * scale_factor).round(), + (text.screen_position.1 * scale_factor).round(), ), - // TODO: Fix precision issues with some DPI factors. + // TODO: Fix precision issues with some scale factors. // // The `ceil` here can cause some words to render on the // same line when they should not. // // Ideally, `wgpu_glyph` should be able to compute layout // using logical positions, and then apply the proper - // DPI scaling. This would ensure that both measuring and - // rendering follow the same layout rules. + // scaling when rendering. This would ensure that both + // measuring and rendering follow the same layout rules. bounds: ( - (text.bounds.0 * dpi).ceil(), - (text.bounds.1 * dpi).ceil(), + (text.bounds.0 * scale_factor).ceil(), + (text.bounds.1 * scale_factor).ceil(), ), scale: wgpu_glyph::Scale { - x: text.scale.x * dpi, - y: text.scale.y * dpi, + x: text.scale.x * scale_factor, + y: text.scale.y * scale_factor, }, ..*text }; diff --git a/wgpu/src/renderer/target.rs b/wgpu/src/renderer/target.rs index 5fe4b50b..20974976 100644 --- a/wgpu/src/renderer/target.rs +++ b/wgpu/src/renderer/target.rs @@ -7,20 +7,20 @@ use raw_window_handle::HasRawWindowHandle; #[derive(Debug)] pub struct Target { surface: wgpu::Surface, - width: u16, - height: u16, - dpi: f32, + width: u32, + height: u32, + scale_factor: f32, transformation: Transformation, swap_chain: wgpu::SwapChain, } impl Target { - pub(crate) fn dimensions(&self) -> (u16, u16) { + pub(crate) fn dimensions(&self) -> (u32, u32) { (self.width, self.height) } - pub(crate) fn dpi(&self) -> f32 { - self.dpi + pub(crate) fn scale_factor(&self) -> f32 { + self.scale_factor } pub(crate) fn transformation(&self) -> Transformation { @@ -37,9 +37,9 @@ impl window::Target for Target { fn new<W: HasRawWindowHandle>( window: &W, - width: u16, - height: u16, - dpi: f32, + width: u32, + height: u32, + scale_factor: f64, renderer: &Renderer, ) -> Target { let surface = wgpu::Surface::create(window); @@ -50,7 +50,7 @@ impl window::Target for Target { surface, width, height, - dpi, + scale_factor: scale_factor as f32, transformation: Transformation::orthographic(width, height), swap_chain, } @@ -58,14 +58,14 @@ impl window::Target for Target { fn resize( &mut self, - width: u16, - height: u16, - dpi: f32, + width: u32, + height: u32, + scale_factor: f64, renderer: &Renderer, ) { self.width = width; self.height = height; - self.dpi = dpi; + self.scale_factor = scale_factor as f32; self.transformation = Transformation::orthographic(width, height); self.swap_chain = new_swap_chain(&self.surface, width, height, &renderer.device); @@ -74,8 +74,8 @@ impl window::Target for Target { fn new_swap_chain( surface: &wgpu::Surface, - width: u16, - height: u16, + width: u32, + height: u32, device: &wgpu::Device, ) -> wgpu::SwapChain { device.create_swap_chain( @@ -83,8 +83,8 @@ fn new_swap_chain( &wgpu::SwapChainDescriptor { usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT, format: wgpu::TextureFormat::Bgra8UnormSrgb, - width: u32::from(width), - height: u32::from(height), + width, + height, present_mode: wgpu::PresentMode::Vsync, }, ) diff --git a/wgpu/src/transformation.rs b/wgpu/src/transformation.rs index c8a7ee75..666696f3 100644 --- a/wgpu/src/transformation.rs +++ b/wgpu/src/transformation.rs @@ -13,10 +13,10 @@ impl Transformation { /// Creates an orthographic projection. #[rustfmt::skip] - pub fn orthographic(width: u16, height: u16) -> Transformation { + pub fn orthographic(width: u32, height: u32) -> Transformation { Transformation(Mat4::from_cols( - Vec4::new(2.0 / f32::from(width), 0.0, 0.0, 0.0), - Vec4::new(0.0, 2.0 / f32::from(height), 0.0, 0.0), + Vec4::new(2.0 / width as f32, 0.0, 0.0, 0.0), + Vec4::new(0.0, 2.0 / height as f32, 0.0, 0.0), Vec4::new(0.0, 0.0, -1.0, 0.0), Vec4::new(-1.0, -1.0, 0.0, 1.0) )) |