1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
pub use bitvec::prelude::*;
pub use lights::*;
pub use raw_window_handle::*;
pub use structs::*;
mod lights;
mod structs;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum RenderMode {
Default = 0,
Normal = 1,
Albedo = 2,
GBuffer = 3,
ScreenSpace = 4,
Ssao = 5,
FilteredSsao = 6,
}
impl Default for RenderMode {
fn default() -> Self {
RenderMode::Default
}
}
pub trait FromWindowHandle {
fn init<W: HasRawWindowHandle>(
window: &W,
width: u32,
height: u32,
scale: f64,
) -> Result<Box<Self>, Box<dyn std::error::Error>>;
}
pub trait Backend {
fn set_2d_mesh(&mut self, id: usize, data: MeshData2D<'_>);
fn set_2d_instances(&mut self, mesh: usize, instances: InstancesData2D<'_>);
fn set_3d_mesh(&mut self, id: usize, data: MeshData3D<'_>);
fn unload_3d_meshes(&mut self, ids: &[usize]);
fn set_3d_instances(&mut self, mesh: usize, instances: InstancesData3D<'_>);
fn set_materials(&mut self, materials: &[DeviceMaterial], changed: &BitSlice);
fn set_textures(&mut self, textures: &[TextureData<'_>], changed: &BitSlice);
fn synchronize(&mut self);
fn render(&mut self, view_2d: CameraView2D, view_3d: CameraView3D, mode: RenderMode);
fn resize(&mut self, window_size: (u32, u32), scale_factor: f64);
fn set_point_lights(&mut self, lights: &[PointLight], changed: &BitSlice);
fn set_spot_lights(&mut self, lights: &[SpotLight], changed: &BitSlice);
fn set_area_lights(&mut self, lights: &[AreaLight], changed: &BitSlice);
fn set_directional_lights(&mut self, lights: &[DirectionalLight], changed: &BitSlice);
fn set_skybox(&mut self, skybox: TextureData<'_>);
fn set_skins(&mut self, skins: &[SkinData<'_>], changed: &BitSlice);
}