1#[cfg(cpu)]
4mod cpu;
5#[cfg(cpu)]
6pub use cpu::*;
7
8pub mod shader {
9 use crabslab::{Id, SlabItem};
12 use glam::{Vec3, Vec4};
13
14 use crate::atlas::shader::AtlasTextureDescriptor;
15
16 #[repr(C)]
18 #[derive(Clone, Copy, PartialEq, SlabItem, core::fmt::Debug)]
19 pub struct MaterialDescriptor {
20 pub emissive_factor: Vec3,
21 pub emissive_strength_multiplier: f32,
22 pub albedo_factor: Vec4,
23 pub metallic_factor: f32,
24 pub roughness_factor: f32,
25
26 pub albedo_texture_id: Id<AtlasTextureDescriptor>,
27 pub metallic_roughness_texture_id: Id<AtlasTextureDescriptor>,
28 pub normal_texture_id: Id<AtlasTextureDescriptor>,
29 pub ao_texture_id: Id<AtlasTextureDescriptor>,
30 pub emissive_texture_id: Id<AtlasTextureDescriptor>,
31
32 pub albedo_tex_coord: u32,
33 pub metallic_roughness_tex_coord: u32,
34 pub normal_tex_coord: u32,
35 pub ao_tex_coord: u32,
36 pub emissive_tex_coord: u32,
37
38 pub has_lighting: bool,
39 pub ao_strength: f32,
40 }
41
42 impl Default for MaterialDescriptor {
43 fn default() -> Self {
44 Self {
45 emissive_factor: Vec3::ZERO,
46 emissive_strength_multiplier: 1.0,
47 albedo_factor: Vec4::ONE,
48 metallic_factor: 1.0,
49 roughness_factor: 1.0,
50 albedo_texture_id: Id::NONE,
51 metallic_roughness_texture_id: Id::NONE,
52 normal_texture_id: Id::NONE,
53 ao_texture_id: Id::NONE,
54 albedo_tex_coord: 0,
55 metallic_roughness_tex_coord: 0,
56 normal_tex_coord: 0,
57 ao_tex_coord: 0,
58 has_lighting: true,
59 ao_strength: 0.0,
60 emissive_texture_id: Id::NONE,
61 emissive_tex_coord: 0,
62 }
63 }
64 }
65}