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}