From f1e20a61f16388ed4d2dac734bab30d67bbd84b3 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 9 Feb 2020 03:25:13 +0100 Subject: Allow `iced_wgpu` to render to any `TextureView` --- native/src/window.rs | 4 +-- native/src/window/backend.rs | 55 ++++++++++++++++++++++++++++++++ native/src/window/renderer.rs | 73 +++++++++++++++++++++---------------------- 3 files changed, 92 insertions(+), 40 deletions(-) create mode 100644 native/src/window/backend.rs (limited to 'native/src') diff --git a/native/src/window.rs b/native/src/window.rs index db9226dc..4dcae62f 100644 --- a/native/src/window.rs +++ b/native/src/window.rs @@ -1,6 +1,6 @@ //! Build window-based GUI applications. +mod backend; mod event; -mod renderer; +pub use backend::Backend; pub use event::Event; -pub use renderer::{Renderer, Target}; diff --git a/native/src/window/backend.rs b/native/src/window/backend.rs new file mode 100644 index 00000000..690dbdab --- /dev/null +++ b/native/src/window/backend.rs @@ -0,0 +1,55 @@ +use crate::MouseCursor; + +use raw_window_handle::HasRawWindowHandle; + +/// A graphics backend that can render to windows. +pub trait Backend: Sized { + /// The settings of the backend. + type Settings: Default; + + /// The iced renderer of the backend. + type Renderer: crate::Renderer; + + /// The surface of the backend. + type Surface; + + /// The swap chain of the backend. + type SwapChain; + + /// Creates a new [`Backend`] and an associated iced renderer. + /// + /// [`Backend`]: trait.Backend.html + fn new(settings: Self::Settings) -> (Self, Self::Renderer); + + /// Crates a new [`Surface`] for the given window. + /// + /// [`Surface`]: #associatedtype.Surface + fn create_surface( + &mut self, + window: &W, + ) -> Self::Surface; + + /// Crates a new [`SwapChain`] for the given [`Surface`]. + /// + /// [`SwapChain`]: #associatedtype.SwapChain + /// [`Surface`]: #associatedtype.Surface + fn create_swap_chain( + &mut self, + surface: &Self::Surface, + width: u32, + height: u32, + scale_factor: f64, + ) -> Self::SwapChain; + + /// Draws the output primitives to the next frame of the given [`SwapChain`]. + /// + /// [`SwapChain`]: #associatedtype.SwapChain + /// [`Surface`]: #associatedtype.Surface + fn draw>( + &mut self, + renderer: &mut Self::Renderer, + swap_chain: &mut Self::SwapChain, + output: &::Output, + overlay: &[T], + ) -> MouseCursor; +} diff --git a/native/src/window/renderer.rs b/native/src/window/renderer.rs index a3cbb8ce..b0cc0134 100644 --- a/native/src/window/renderer.rs +++ b/native/src/window/renderer.rs @@ -2,57 +2,54 @@ use crate::MouseCursor; use raw_window_handle::HasRawWindowHandle; -/// A renderer that can target windows. -pub trait Renderer: crate::Renderer + Sized { - /// The settings of the renderer. +/// A graphics backend that can render to windows. +pub trait Backend: Sized { + /// The settings of the backend. type Settings: Default; - /// The type of target. - type Target: Target; + /// The iced renderer of the backend. + type Renderer: crate::Renderer; - /// Creates a new window [`Renderer`]. + /// The surface of the backend. + type Surface; + + /// The target of the backend. + type Target; + + /// Creates a new [`Gpu`] and an associated iced renderer. /// - /// [`Renderer`]: trait.Renderer.html - fn new(settings: Self::Settings) -> Self; + /// [`Gpu`]: trait.Gpu.html + fn new(settings: Self::Settings) -> (Self, Self::Renderer); - /// Performs the drawing operations described in the output on the given - /// target. + /// Crates a new [`Surface`] for the given window. /// - /// The overlay can be a bunch of debug text logs. It should be rendered on - /// top of the GUI on most scenarios. - fn draw>( + /// [`Surface`]: #associatedtype.Surface + fn create_surface( &mut self, - output: &Self::Output, - overlay: &[T], - target: &mut Self::Target, - ) -> MouseCursor; -} - -/// A rendering target. -pub trait Target { - /// The renderer of this target. - type Renderer; + window: &W, + ) -> Self::Surface; - /// Creates a new rendering [`Target`] from the given window handle, width, - /// height and dpi factor. + /// Crates a new [`Target`] for the given [`Surface`]. /// - /// [`Target`]: trait.Target.html - fn new( - window: &W, + /// [`Target`]: #associatedtype.Target + /// [`Surface`]: #associatedtype.Surface + fn create_target( + &mut self, + surface: &Self::Surface, width: u32, height: u32, scale_factor: f64, - renderer: &Self::Renderer, - ) -> Self; + ) -> Self::Target; - /// Resizes the current [`Target`]. + /// Draws the output primitives to the given [`Target`]. /// - /// [`Target`]: trait.Target.html - fn resize( + /// [`Target`]: #associatedtype.Target + /// [`Surface`]: #associatedtype.Surface + fn draw>( &mut self, - width: u32, - height: u32, - scale_factor: f64, - renderer: &Self::Renderer, - ); + renderer: &mut Self::Renderer, + target: &mut Self::Target, + output: &::Output, + overlay: &[T], + ) -> MouseCursor; } -- cgit From 8edb04fddd55519ebebeee32a79dac99eef9e174 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 9 Feb 2020 03:26:40 +0100 Subject: Remove unused `window::renderer` module --- native/src/window/renderer.rs | 55 ------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 native/src/window/renderer.rs (limited to 'native/src') diff --git a/native/src/window/renderer.rs b/native/src/window/renderer.rs deleted file mode 100644 index b0cc0134..00000000 --- a/native/src/window/renderer.rs +++ /dev/null @@ -1,55 +0,0 @@ -use crate::MouseCursor; - -use raw_window_handle::HasRawWindowHandle; - -/// A graphics backend that can render to windows. -pub trait Backend: Sized { - /// The settings of the backend. - type Settings: Default; - - /// The iced renderer of the backend. - type Renderer: crate::Renderer; - - /// The surface of the backend. - type Surface; - - /// The target of the backend. - type Target; - - /// Creates a new [`Gpu`] and an associated iced renderer. - /// - /// [`Gpu`]: trait.Gpu.html - fn new(settings: Self::Settings) -> (Self, Self::Renderer); - - /// Crates a new [`Surface`] for the given window. - /// - /// [`Surface`]: #associatedtype.Surface - fn create_surface( - &mut self, - window: &W, - ) -> Self::Surface; - - /// Crates a new [`Target`] for the given [`Surface`]. - /// - /// [`Target`]: #associatedtype.Target - /// [`Surface`]: #associatedtype.Surface - fn create_target( - &mut self, - surface: &Self::Surface, - width: u32, - height: u32, - scale_factor: f64, - ) -> Self::Target; - - /// Draws the output primitives to the given [`Target`]. - /// - /// [`Target`]: #associatedtype.Target - /// [`Surface`]: #associatedtype.Surface - fn draw>( - &mut self, - renderer: &mut Self::Renderer, - target: &mut Self::Target, - output: &::Output, - overlay: &[T], - ) -> MouseCursor; -} -- cgit From 8f0b59a4b28bee028a879b0705eeeaa0b2e82df6 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 9 Feb 2020 03:36:59 +0100 Subject: Remove `scale_factor` from `iced_wgpu::Viewport` --- native/src/window/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'native/src') diff --git a/native/src/window/backend.rs b/native/src/window/backend.rs index 690dbdab..3bc691cd 100644 --- a/native/src/window/backend.rs +++ b/native/src/window/backend.rs @@ -38,7 +38,6 @@ pub trait Backend: Sized { surface: &Self::Surface, width: u32, height: u32, - scale_factor: f64, ) -> Self::SwapChain; /// Draws the output primitives to the next frame of the given [`SwapChain`]. @@ -50,6 +49,7 @@ pub trait Backend: Sized { renderer: &mut Self::Renderer, swap_chain: &mut Self::SwapChain, output: &::Output, + scale_factor: f64, overlay: &[T], ) -> MouseCursor; } -- cgit From ce6806bbf4fce198453e13da7cb38d62fd1739f5 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 9 Feb 2020 05:24:54 +0100 Subject: Remove event conversion from `iced_winit::Application` --- native/src/user_interface.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'native/src') diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 53b36240..376cd2f4 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -174,9 +174,9 @@ where /// ``` pub fn update( &mut self, - renderer: &Renderer, - clipboard: Option<&dyn Clipboard>, events: impl IntoIterator, + clipboard: Option<&dyn Clipboard>, + renderer: &Renderer, ) -> Vec { let mut messages = Vec::new(); -- cgit From 04ec587230fa7e331894c7bb5620c3ad3e5a47be Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 9 Feb 2020 05:57:15 +0100 Subject: Fix documentation examples of `UserInterface` --- native/src/user_interface.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'native/src') diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 376cd2f4..08914bed 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -162,7 +162,7 @@ where /// ); /// /// // Update the user interface - /// let messages = user_interface.update(&renderer, None, events.drain(..)); + /// let messages = user_interface.update(events.drain(..), None, &renderer); /// /// cache = user_interface.into_cache(); /// @@ -246,7 +246,7 @@ where /// &mut renderer, /// ); /// - /// let messages = user_interface.update(&renderer, None, events.drain(..)); + /// let messages = user_interface.update(events.drain(..), None, &renderer); /// /// // Draw the user interface /// let mouse_cursor = user_interface.draw(&mut renderer); -- cgit