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}