Skip to main content

kaldera/vk/
model.rs

1
2use super::geometry::{Vec3, Vec4, Mat4};
3use super::Result;
4
5use std::sync::Arc;
6
7#[repr(C)]
8pub struct Vertex {
9    pub coordinate: Vec3,
10    pub color: Vec3,
11}
12
13#[repr(C)]
14pub struct RayTracingUniformBufferModel {
15    pub view_inverse: Mat4,
16    pub proj_inverse: Mat4,
17}
18
19pub struct TriangleModel {
20    vertices: Vec<Vec3>,
21    indices: Vec<u32>,
22}
23
24impl TriangleModel {
25    pub fn new() -> Result<Arc<Self>> {
26        let vertices = vec![
27            Vec3 { x: 1.0, y: 1.0, z: 0.0 },
28            Vec3 { x: -1.0, y: 1.0, z: 0.0 },
29            Vec3 { x: 0.0, y: -1.0, z: 0.0 },
30        ];
31        let indices = vec![
32            0, 1, 2,
33        ];
34        let model = Self {
35            vertices,
36            indices,
37        };
38        Ok(Arc::new(model))
39    }
40
41    pub fn vertices(&self) -> &Vec<Vec3> {
42        &self.vertices
43    }
44
45    pub fn indices(&self) -> &Vec<u32> {
46        &self.indices
47    }
48}