diff options
| author | 2020-02-10 19:49:08 +0100 | |
|---|---|---|
| committer | 2020-02-10 19:49:08 +0100 | |
| commit | 5d16f431b3088189579cf096b3abf89578cc73f6 (patch) | |
| tree | c7efea00fabd87133a59760e902548d39822a844 /native/src/window/backend.rs | |
| parent | 95880ca74bddb6a23774621ef766b91956d40a61 (diff) | |
| parent | 4337daddb2a02a2c60dfc5beb896e3059588312a (diff) | |
| download | iced-5d16f431b3088189579cf096b3abf89578cc73f6.tar.gz iced-5d16f431b3088189579cf096b3abf89578cc73f6.tar.bz2 iced-5d16f431b3088189579cf096b3abf89578cc73f6.zip  | |
Merge pull request #183 from hecrj/feature/wgpu-integration
Integration with existing `wgpu` projects
Diffstat (limited to 'native/src/window/backend.rs')
| -rw-r--r-- | native/src/window/backend.rs | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/native/src/window/backend.rs b/native/src/window/backend.rs new file mode 100644 index 00000000..3bc691cd --- /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<W: HasRawWindowHandle>( +        &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, +    ) -> Self::SwapChain; + +    /// Draws the output primitives to the next frame of the given [`SwapChain`]. +    /// +    /// [`SwapChain`]: #associatedtype.SwapChain +    /// [`Surface`]: #associatedtype.Surface +    fn draw<T: AsRef<str>>( +        &mut self, +        renderer: &mut Self::Renderer, +        swap_chain: &mut Self::SwapChain, +        output: &<Self::Renderer as crate::Renderer>::Output, +        scale_factor: f64, +        overlay: &[T], +    ) -> MouseCursor; +}  | 
