embree_rs/
geometry.rs

1use sys::*;
2
3use triangle_mesh;
4use quad_mesh;
5use instance;
6
7pub enum Geometry<'a> {
8    Triangle(triangle_mesh::TriangleMesh<'a>),
9    Quad(quad_mesh::QuadMesh<'a>),
10    Instance(instance::Instance<'a>)
11}
12
13/// Geometry trait implemented by all Embree Geometry types
14impl<'a> Geometry<'a> {
15    pub fn handle(&self) -> RTCGeometry {
16        match self {
17            &Geometry::Triangle(ref m) => m.handle,
18            &Geometry::Quad(ref q) => q.handle,
19            &Geometry::Instance(ref i) => i.handle
20        }
21    }
22    pub fn commit(&mut self) {
23        unsafe {
24            rtcCommitGeometry(self.handle());
25        }
26    }
27}
28
29impl<'a> Drop for Geometry<'a> {
30    fn drop(&mut self) {
31        unsafe {
32            rtcReleaseGeometry(self.handle());
33        }
34    }
35}
36
37impl<'a> PartialEq<Geometry<'a>> for Geometry<'a> {
38    fn eq(&self, other: &Geometry) -> bool {
39        self.handle() == other.handle()
40    }
41}
42
43impl<'a> Eq for Geometry<'a> {}
44