1use cgmath::Vector4;
2
3use buffer::Buffer;
4use device::Device;
5use geometry::Geometry;
6use sys::*;
7use {BufferType, Format, GeometryType};
8
9pub struct QuadMesh<'a> {
10 device: &'a Device,
11 pub(crate) handle: RTCGeometry,
12 pub vertex_buffer: Buffer<'a, Vector4<f32>>,
13 pub index_buffer: Buffer<'a, Vector4<u32>>,
14}
15
16impl<'a> QuadMesh<'a> {
17 pub fn unanimated(device: &'a Device, num_quads: usize, num_verts: usize) -> QuadMesh<'a> {
18 let h = unsafe { rtcNewGeometry(device.handle, GeometryType::QUAD) };
19 let mut vertex_buffer = Buffer::new(device, num_verts);
20 let mut index_buffer = Buffer::new(device, num_quads);
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::UINT4,
39 index_buffer.handle,
40 0,
41 16,
42 num_quads,
43 );
44 index_buffer.set_attachment(h, BufferType::INDEX, 0);
45 }
46 QuadMesh {
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 QuadMesh<'a> {}
56