Skip to main content

rotex_types/
scene.rs

1use crate::internal::math::identity4;
2use crate::resource::ids::{MaterialId, MeshId};
3
4#[derive(Debug, Clone, Copy)]
5pub struct CameraDescriptor {
6    pub view: [[f32; 4]; 4],
7    pub projection: [[f32; 4]; 4],
8}
9
10impl Default for CameraDescriptor {
11    fn default() -> Self {
12        Self {
13            view: identity4(),
14            projection: identity4(),
15        }
16    }
17}
18
19#[derive(Debug, Clone, Copy)]
20pub struct MeshInstanceDescriptor {
21    pub mesh: MeshId,
22    pub material: MaterialId,
23    pub transform: [[f32; 4]; 4],
24}
25
26impl MeshInstanceDescriptor {
27    pub fn new(mesh: MeshId, material: MaterialId) -> Self {
28        Self {
29            mesh,
30            material,
31            transform: identity4(),
32        }
33    }
34
35    pub fn with_transform(mut self, transform: [[f32; 4]; 4]) -> Self {
36        self.transform = transform;
37        self
38    }
39}
40
41#[derive(Debug, Clone)]
42pub struct SceneDescriptor {
43    pub camera: CameraDescriptor,
44    pub instances: Vec<MeshInstanceDescriptor>,
45}
46
47impl SceneDescriptor {
48    pub fn new(instances: Vec<MeshInstanceDescriptor>) -> Self {
49        Self {
50            camera: CameraDescriptor::default(),
51            instances,
52        }
53    }
54
55    pub fn with_camera(mut self, camera: CameraDescriptor) -> Self {
56        self.camera = camera;
57        self
58    }
59}