summaryrefslogtreecommitdiffstats
path: root/native/src/window/backend.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2020-02-10 19:49:08 +0100
committerLibravatar GitHub <noreply@github.com>2020-02-10 19:49:08 +0100
commit5d16f431b3088189579cf096b3abf89578cc73f6 (patch)
treec7efea00fabd87133a59760e902548d39822a844 /native/src/window/backend.rs
parent95880ca74bddb6a23774621ef766b91956d40a61 (diff)
parent4337daddb2a02a2c60dfc5beb896e3059588312a (diff)
downloadiced-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.rs55
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;
+}