diff options
| author | 2019-11-02 19:58:49 +0100 | |
|---|---|---|
| committer | 2019-11-02 19:58:49 +0100 | |
| commit | 58e04af824a64d9f712a2d6691d4283888d271d3 (patch) | |
| tree | 1408e07b0eb618d9a64ad6a9a0d8953832dc2aa8 /wgpu/src/renderer | |
| parent | f3baae92282566ccb6ff3689a08fcaa907430ef7 (diff) | |
| download | iced-58e04af824a64d9f712a2d6691d4283888d271d3.tar.gz iced-58e04af824a64d9f712a2d6691d4283888d271d3.tar.bz2 iced-58e04af824a64d9f712a2d6691d4283888d271d3.zip | |
Draft `Metrics` and improve `Target` abstraction
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/renderer.rs | 84 | 
1 files changed, 54 insertions, 30 deletions
| diff --git a/wgpu/src/renderer.rs b/wgpu/src/renderer.rs index fbc39327..6e90c129 100644 --- a/wgpu/src/renderer.rs +++ b/wgpu/src/renderer.rs @@ -1,6 +1,6 @@  use crate::{quad, Image, Primitive, Quad, Transformation};  use iced_native::{ -    renderer::Debugger, renderer::Windowed, Background, Color, Layout, +    renderer::Debugger, renderer::Windowed, Background, Color, Layout, Metrics,      MouseCursor, Point, Rectangle, Widget,  }; @@ -26,7 +26,6 @@ mod text;  mod text_input;  pub struct Renderer { -    surface: Surface,      device: Device,      queue: Queue,      quad_pipeline: quad::Pipeline, @@ -36,12 +35,61 @@ pub struct Renderer {  }  pub struct Target { +    surface: Surface,      width: u16,      height: u16,      transformation: Transformation,      swap_chain: SwapChain,  } +impl iced_native::renderer::Target for Target { +    type Renderer = Renderer; + +    fn new<W: HasRawWindowHandle>( +        window: &W, +        width: u16, +        height: u16, +        renderer: &Renderer, +    ) -> Target { +        let surface = Surface::create(window); + +        let swap_chain = renderer.device.create_swap_chain( +            &surface, +            &SwapChainDescriptor { +                usage: TextureUsage::OUTPUT_ATTACHMENT, +                format: TextureFormat::Bgra8UnormSrgb, +                width: u32::from(width), +                height: u32::from(height), +                present_mode: wgpu::PresentMode::Vsync, +            }, +        ); + +        Target { +            surface, +            width, +            height, +            transformation: Transformation::orthographic(width, height), +            swap_chain, +        } +    } + +    fn resize(&mut self, width: u16, height: u16, renderer: &Renderer) { +        self.width = width; +        self.height = height; +        self.transformation = Transformation::orthographic(width, height); +        self.swap_chain = renderer.device.create_swap_chain( +            &self.surface, +            &SwapChainDescriptor { +                usage: TextureUsage::OUTPUT_ATTACHMENT, +                format: TextureFormat::Bgra8UnormSrgb, +                width: u32::from(width), +                height: u32::from(height), +                present_mode: wgpu::PresentMode::Vsync, +            }, +        ); +    } +} +  pub struct Layer<'a> {      bounds: Rectangle<u32>,      y_offset: u32, @@ -63,7 +111,7 @@ impl<'a> Layer<'a> {  }  impl Renderer { -    fn new<W: HasRawWindowHandle>(window: &W) -> Self { +    fn new() -> Self {          let adapter = Adapter::request(&RequestAdapterOptions {              power_preference: PowerPreference::LowPower,              backends: BackendBit::all(), @@ -77,8 +125,6 @@ impl Renderer {              limits: Limits { max_bind_groups: 2 },          }); -        let surface = Surface::create(window); -          // TODO: Think about font loading strategy          // Loading system fonts with fallback may be a good idea          let font: &[u8] = @@ -91,7 +137,6 @@ impl Renderer {          let image_pipeline = crate::image::Pipeline::new(&mut device);          Self { -            surface,              device,              queue,              quad_pipeline, @@ -101,24 +146,6 @@ impl Renderer {          }      } -    fn target(&self, width: u16, height: u16) -> Target { -        Target { -            width, -            height, -            transformation: Transformation::orthographic(width, height), -            swap_chain: self.device.create_swap_chain( -                &self.surface, -                &SwapChainDescriptor { -                    usage: TextureUsage::OUTPUT_ATTACHMENT, -                    format: TextureFormat::Bgra8UnormSrgb, -                    width: u32::from(width), -                    height: u32::from(height), -                    present_mode: wgpu::PresentMode::Vsync, -                }, -            ), -        } -    } -      fn draw(          &mut self,          (primitive, mouse_cursor): &(Primitive, MouseCursor), @@ -363,17 +390,14 @@ impl iced_native::Renderer for Renderer {  impl Windowed for Renderer {      type Target = Target; -    fn new<W: HasRawWindowHandle>(window: &W) -> Self { -        Self::new(window) -    } - -    fn target(&self, width: u16, height: u16) -> Target { -        self.target(width, height) +    fn new() -> Self { +        Self::new()      }      fn draw(          &mut self,          output: &Self::Output, +        metrics: Option<Metrics>,          target: &mut Target,      ) -> MouseCursor {          self.draw(output, target) | 
