FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
Mesh.hpp
Go to the documentation of this file.
1 #ifndef SURFACE_HPP_
2 #define SURFACE_HPP_
3 
4 #include "SpatialDataObject.hpp"
6 #include <vector>
11 #include <condition_variable>
12 #include <unordered_map>
13 
14 namespace fast {
15 
20 class FAST_EXPORT Mesh : public SpatialDataObject {
22  public:
23  void create(
24  std::vector<MeshVertex> vertices,
25  std::vector<MeshLine> lines = {},
26  std::vector<MeshTriangle> triangles = {}
27  );
28  void create(
29  uint nrOfVertices,
30  uint nrOfLInes,
31  uint nrOfTriangles,
32  bool useColors,
33  bool useNormals,
34  bool useEBO
35  );
36  VertexBufferObjectAccess::pointer getVertexBufferObjectAccess(accessType access);
37  MeshAccess::pointer getMeshAccess(accessType access);
38  MeshOpenCLAccess::pointer getOpenCLAccess(accessType access, OpenCLDevice::pointer device);
39  int getNrOfTriangles();
40  int getNrOfLines();
41  int getNrOfVertices();
42  void setBoundingBox(DataBoundingBox box);
43  ~Mesh();
44  private:
45  Mesh();
46  void freeAll();
47  void free(ExecutionDevice::pointer device);
48  void setAllDataToOutOfDate();
49  void updateOpenCLBufferData(OpenCLDevice::pointer device);
50 
51  bool mIsInitialized;
52 
53  // VBO data
54  bool mVBOHasData;
55  bool mVBODataIsUpToDate;
56  GLuint mCoordinateVBO = 0;
57  GLuint mNormalVBO = 0;
58  GLuint mColorVBO = 0;
59  GLuint mLineEBO = 0;
60  GLuint mTriangleEBO = 0;
61  uint mNrOfVertices;
62  uint mNrOfLines;
63  uint mNrOfTriangles;
64  bool mUseEBO;
65  bool mUseColorVBO;
66  bool mUseNormalVBO;
67 
68  // Host data
69  bool mHostHasData;
70  bool mHostDataIsUpToDate;
71  std::vector<float> mCoordinates;
72  std::vector<float> mNormals;
73  std::vector<float> mColors;
74  std::vector<uint> mLines;
75  std::vector<uint> mTriangles;
76 
77  // OpenCL buffer data
78  std::unordered_map<OpenCLDevice::pointer, cl::Buffer*> mCoordinatesBuffers;
79  std::unordered_map<OpenCLDevice::pointer, cl::Buffer*> mLinesBuffers;
80  std::unordered_map<OpenCLDevice::pointer, cl::Buffer*> mTrianglesBuffers;
81  std::unordered_map<OpenCLDevice::pointer, bool> mCLBuffersIsUpToDate;
82 
83  // Declare as friends so they can get access to the accessFinished methods
84  friend class MeshAccess;
86  friend class MeshOpenCLAccess;
87 };
88 
89 } // end namespace fast
90 
91 
92 #endif /* SURFACE_HPP_ */
fast::ExecutionDevice::pointer
std::shared_ptr< ExecutionDevice > pointer
Definition: ExecutionDevice.hpp:11
fast::MeshOpenCLAccess
Definition: MeshOpenCLAccess.hpp:12
fast
Definition: AffineTransformation.hpp:7
fast::MeshOpenCLAccess::pointer
std::unique_ptr< MeshOpenCLAccess > pointer
Definition: MeshOpenCLAccess.hpp:14
VertexBufferObjectAccess.hpp
fast::Mesh
The mesh data object contains vertices and optionally a set of lines and/or triangles....
Definition: Mesh.hpp:20
Access.hpp
FAST_OBJECT
#define FAST_OBJECT(className)
Definition: Object.hpp:9
SpatialDataObject.hpp
fast::VertexBufferObjectAccess::pointer
std::unique_ptr< VertexBufferObjectAccess > pointer
Definition: VertexBufferObjectAccess.hpp:44
MeshAccess.hpp
accessType
accessType
Definition: Access.hpp:5
fast::MeshAccess::pointer
std::unique_ptr< MeshAccess > pointer
Definition: MeshAccess.hpp:37
fast::VertexBufferObjectAccess
Definition: VertexBufferObjectAccess.hpp:21
MeshOpenCLAccess.hpp
DataTypes.hpp
fast::MeshAccess
Definition: MeshAccess.hpp:13
uint
unsigned int uint
Definition: DataTypes.hpp:16
fast::SpatialDataObject
Definition: SpatialDataObject.hpp:10
fast::DataBoundingBox
Definition: DataBoundingBox.hpp:13