1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use crate::{AbstractMesh, GpuMesh, GpuTriangle, GpuVertex, Transform, Z_MAX};
pub trait Render {
fn render(&self, mesh: &mut GpuMesh, transform: Transform, z: i16);
}
impl Render for AbstractMesh {
fn render(&self, gpu_mesh: &mut GpuMesh, transform: Transform, z: i16) {
let z = z as f32 / Z_MAX as f32;
let n = gpu_mesh.vertices.len() as u32;
for abstract_vertex in &self.vertices {
gpu_mesh.vertices.push(GpuVertex {
pos: transform * abstract_vertex.pos,
tex_pos: abstract_vertex.tex_pos.map(|v| v * transform ),
z,
col: abstract_vertex.col,
});
}
gpu_mesh.triangles.extend(
self.triangles
.iter()
.map(|t| GpuTriangle::from_abstract(t, n, z)),
);
}
}