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);
}