diene_engine_renderer_api/
lib.rs1#![forbid(unsafe_code)]
4
5use std::{error::Error, fmt::Debug};
6
7pub use raw_window_handle::{DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, WindowHandle};
8
9#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
11pub struct RenderExtent {
12 pub width: u32,
14
15 pub height: u32,
17}
18
19impl RenderExtent {
20 pub const fn new(width: u32, height: u32) -> Self {
22 Self { width, height }
23 }
24
25 pub const fn is_empty(self) -> bool {
27 self.width == 0 || self.height == 0
28 }
29}
30
31pub trait RenderWindow: Debug + HasDisplayHandle + HasWindowHandle {
33 fn size(&self) -> RenderExtent;
35}
36
37pub trait Renderer: Debug {
39 type Error: Error + Send + Sync + 'static;
41
42 fn prepare_frame(&mut self) -> Result<(), Self::Error>;
44
45 fn render(&mut self) -> Result<(), Self::Error>;
47
48 fn resize(&mut self, extent: RenderExtent) -> Result<(), Self::Error>;
50}
51
52pub type BoxedRenderer<E> = Box<dyn Renderer<Error = E>>;
54
55pub trait RendererFactory: Debug {
57 type Error: Error + Send + Sync + 'static;
59
60 fn create_renderer(&mut self, window: &dyn RenderWindow) -> Result<BoxedRenderer<Self::Error>, Self::Error>;
62}