Cuda use streams and async to avoid busywaiting
[blender.git] / intern / cycles / subd / subd_mesh.h
1 /*
2  * Original code in the public domain -- castanyo@yahoo.es
3  *
4  * Modifications copyright (c) 2011, Blender Foundation.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met:
10  * * Redistributions of source code must retain the above copyright
11  *   notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef __SUBD_MESH_H__
30 #define __SUBD_MESH_H__
31
32 #include "util_map.h"
33 #include "util_types.h"
34 #include "util_vector.h"
35
36 CCL_NAMESPACE_BEGIN
37
38 #ifndef WITH_OPENSUBDIV
39 class SubdVert;
40 class SubdFace;
41 #endif
42
43 class DiagSplit;
44 class Mesh;
45
46 /* Subd Mesh with simple linear subdivision */
47
48 class SubdMesh
49 {
50 public:
51         SubdMesh();
52         ~SubdMesh();
53
54         SubdVert *add_vert(const float3& co);
55         
56         SubdFace *add_face(int v0, int v1, int v2);
57         SubdFace *add_face(int v0, int v1, int v2, int v3);
58         SubdFace *add_face(int *index, int num);
59
60         bool finish();
61         void tessellate(DiagSplit *split);
62
63 protected:
64 #ifdef WITH_OPENSUBDIV
65         void *_hbrmesh;
66         vector<float> positions;
67         int num_verts, num_ptex_faces;
68 #else
69         vector<SubdVert*> verts;
70         vector<SubdFace*> faces;
71 #endif
72
73 };
74
75 CCL_NAMESPACE_END
76
77 #endif /* __SUBD_MESH_H__ */
78