You.i Engine
YiMesh.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_MESH_H_
3 #define _YI_MESH_H_
4 
7 #include "scenetree/YiAABB.h"
8 
9 #include <glm/mat4x4.hpp>
10 
11 #include <memory>
12 
34 {
35 public:
40  {
44  };
45 
46 
53  {
56  };
57 
71  {
72  uint32_t uBufferIndex;
73  uint32_t uAttribute;
74  uint32_t uNumElements;
75  uint32_t uStride;
76  uint32_t uByteOffset;
77  };
78 
80 
95  static const uint32_t YI_POSITION = 0;
96  static const uint32_t YI_TEXCOORD = 1;
97  static const uint32_t YI_NORMAL = 2;
98  static const uint32_t YI_COLOR = 3;
100 
101  CYIMesh();
102  virtual ~CYIMesh();
103 
118  void SetTransform(const glm::mat4 &transform);
119 
123  const glm::mat4 &GetTransform() const;
124 
131  uint32_t AddVertexBuffer(const std::shared_ptr<CYIAssetBufferObjectData> &pData, YI_BUFFER_OWNERSHIP ownership);
132 
137  void SetIndexBuffer(const std::shared_ptr<CYIAssetBufferObjectData> &pData, YI_BUFFER_OWNERSHIP ownership);
138 
143  void SetBindings(const std::vector<YI_ATTRIBUTE_BINDING> &bindings);
144 
148  const std::vector<YI_ATTRIBUTE_BINDING> &GetBindings() const;
149 
155  void SetAxisAlignedBoundingBox(const CYIAABB &aabb);
156 
160  const CYIAABB &GetAxisAlignedBoundingBox() const;
161 
165  const std::shared_ptr<CYIAssetBufferObjectData> &GetVertexBuffer(uint32_t uBufferIndex) const;
166 
170  const std::shared_ptr<CYIAssetBufferObjectData> &GetIndexBuffer() const;
171 
175  void RemoveVertexBuffer(uint32_t uBufferIndex);
176 
180  void RemoveIndexBuffer();
181 
185  const YI_ATTRIBUTE_BINDING &GetBinding(uint32_t uBindingIndex);
186 
190  uint32_t GetNumVertexBuffers() const;
191 
195  uint32_t GetNumBindings() const;
196 
201  void SetPrimitive(YI_GEOMETRY_PRIMITIVE primitive);
202 
207 
211  uint32_t GetIndexCount() const;
212 
216  void SetIndexCount(uint32_t count);
217 
223  uint32_t GetStartOffset() const;
224 
232  void SetStartOffset(uint32_t uStartOffset);
233 
238  void SetDepthTesting(bool bEnabled);
239 
243  bool GetDepthTesting() const;
244 
248  bool IsLoaded() const;
249 
250 protected:
251  std::vector<std::shared_ptr<CYIAssetBufferObjectData>> m_VBOs;
252  std::shared_ptr<CYIAssetBufferObjectData> m_IBO;
253  std::vector<YI_ATTRIBUTE_BINDING> m_Attributes;
255  uint32_t m_indexCount;
256  uint32_t m_uStartOffset;
257  glm::mat4 m_transform;
260  std::vector<YI_BUFFER_OWNERSHIP> m_VBOOwnership;
262  mutable bool m_bIsLoaded;
263 };
264 
267 #endif // _YI_MESH_H_
bool m_bIsLoaded
Definition: YiMesh.h:262
bool IsLoaded() const
Definition: YiMesh.h:41
uint32_t GetNumVertexBuffers() const
uint32_t uNumElements
Definition: YiMesh.h:74
std::vector< YI_ATTRIBUTE_BINDING > m_Attributes
Definition: YiMesh.h:253
YI_GEOMETRY_PRIMITIVE
Definition: YiMesh.h:39
uint32_t uByteOffset
Definition: YiMesh.h:76
uint32_t GetIndexCount() const
YI_BUFFER_OWNERSHIP
Definition: YiMesh.h:52
bool GetDepthTesting() const
Class representing an instance of geometry information.
Definition: YiMesh.h:33
static const uint32_t YI_COLOR
Definition: YiMesh.h:98
glm::mat4 m_transform
Definition: YiMesh.h:257
const YI_ATTRIBUTE_BINDING & GetBinding(uint32_t uBindingIndex)
static const uint32_t YI_NORMAL
Definition: YiMesh.h:97
YI_GEOMETRY_PRIMITIVE m_primitive
Definition: YiMesh.h:254
YI_GEOMETRY_PRIMITIVE GetPrimitive() const
Definition: YiMesh.h:43
void SetIndexCount(uint32_t count)
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
uint32_t GetStartOffset() const
const glm::mat4 & GetTransform() const
void SetPrimitive(YI_GEOMETRY_PRIMITIVE primitive)
uint32_t uStride
Definition: YiMesh.h:75
std::vector< YI_BUFFER_OWNERSHIP > m_VBOOwnership
Definition: YiMesh.h:260
bool m_bHasDepth
Definition: YiMesh.h:259
uint32_t m_uStartOffset
Definition: YiMesh.h:256
void SetTransform(const glm::mat4 &transform)
std::shared_ptr< CYIAssetBufferObjectData > m_IBO
Definition: YiMesh.h:252
const CYIAABB & GetAxisAlignedBoundingBox() const
virtual ~CYIMesh()
uint32_t uAttribute
Definition: YiMesh.h:73
std::vector< std::shared_ptr< CYIAssetBufferObjectData > > m_VBOs
Definition: YiMesh.h:251
void SetBindings(const std::vector< YI_ATTRIBUTE_BINDING > &bindings)
This class represents an Axis-Aligned Bounding Box.
Definition: YiAABB.h:24
Definition: YiMesh.h:42
const std::shared_ptr< CYIAssetBufferObjectData > & GetVertexBuffer(uint32_t uBufferIndex) const
void RemoveIndexBuffer()
static const uint32_t YI_TEXCOORD
Definition: YiMesh.h:96
uint32_t GetNumBindings() const
uint32_t uBufferIndex
Definition: YiMesh.h:72
void SetDepthTesting(bool bEnabled)
void SetAxisAlignedBoundingBox(const CYIAABB &aabb)
void SetStartOffset(uint32_t uStartOffset)
uint32_t AddVertexBuffer(const std::shared_ptr< CYIAssetBufferObjectData > &pData, YI_BUFFER_OWNERSHIP ownership)
void SetIndexBuffer(const std::shared_ptr< CYIAssetBufferObjectData > &pData, YI_BUFFER_OWNERSHIP ownership)
uint32_t m_indexCount
Definition: YiMesh.h:255
Definition: YiMesh.h:70
const std::vector< YI_ATTRIBUTE_BINDING > & GetBindings() const
static const uint32_t YI_POSITION
Definition: YiMesh.h:95
Definition: YiMesh.h:54
const std::shared_ptr< CYIAssetBufferObjectData > & GetIndexBuffer() const
YI_BUFFER_OWNERSHIP m_IBOOwnership
Definition: YiMesh.h:261
CYIAABB m_AABB
Definition: YiMesh.h:258
Definition: YiMesh.h:55
void RemoveVertexBuffer(uint32_t uBufferIndex)