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
13impl<'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