embree3_arm/
triangle_mesh.rs1use cgmath::{Vector3, Vector4};
2
3use buffer::Buffer;
4use device::Device;
5use geometry::Geometry;
6use sys::*;
7use {BufferType, Format, GeometryType};
8
9pub struct TriangleMesh<'a> {
10 device: &'a Device,
11 pub(crate) handle: RTCGeometry,
12 pub vertex_buffer: Buffer<'a, Vector4<f32>>,
13 pub index_buffer: Buffer<'a, Vector3<u32>>,
14}
15
16impl<'a> TriangleMesh<'a> {
17 pub fn unanimated(device: &'a Device, num_tris: usize, num_verts: usize) -> TriangleMesh<'a> {
18 let h = unsafe { rtcNewGeometry(device.handle, GeometryType::TRIANGLE) };
19 let mut vertex_buffer = Buffer::new(device, num_verts);
20 let mut index_buffer = Buffer::new(device, num_tris);
21 unsafe {
22 rtcSetGeometryBuffer(
23 h,
24 BufferType::VERTEX,
25 0,
26 Format::FLOAT3,
27 vertex_buffer.handle,
28 0,
29 16,
30 num_verts,
31 );
32 vertex_buffer.set_attachment(h, BufferType::VERTEX, 0);
33
34 rtcSetGeometryBuffer(
35 h,
36 BufferType::INDEX,
37 0,
38 Format::UINT3,
39 index_buffer.handle,
40 0,
41 12,
42 num_tris,
43 );
44 index_buffer.set_attachment(h, BufferType::INDEX, 0);
45 }
46 TriangleMesh {
47 device: device,
48 handle: h,
49 vertex_buffer: vertex_buffer,
50 index_buffer: index_buffer,
51 }
52 }
53}
54
55unsafe impl<'a> Sync for TriangleMesh<'a> {}