All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PODMesh.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 
7 namespace Eegeo
8 {
9  namespace IO
10  {
11  namespace POD
12  {
13  const int POD_MESH_MAX_UV_CHANNELS = 2;
14 
15  class PODMesh
16  {
17  private:
18  u32 m_numVertices;
19  u32 m_numIndices;
20  u32 m_numUVChannels;
21 
22  u32 m_positionStride;
23  u32 m_positionOffset;
24 
25  u32 m_normalStride;
26  u32 m_normalOffset;
27 
28  u32 m_pUVStrides[POD_MESH_MAX_UV_CHANNELS];
29  u32 m_pUVOffsets[POD_MESH_MAX_UV_CHANNELS];
30 
31  void* m_pInterleavedData;
32  void* m_pIndexData;
33 
34  u32* m_pStripLengths;
35  u32 m_numStrips;
36 
37  u32 m_boneIndexStride;
38  u8* m_pBoneIndexData;
39  u32 m_numBonesVert;
40 
41  u32 m_boneWeightStride;
42  u8* m_pBoneWeightData;
43  u32 m_numBoneWeights;
44 
45  s32 m_batchCount;
46  s32 m_batchMax;
47  s32* m_pBatches;
48  s32* m_pBatchOffsets;
49  s32* m_pBatchBoneCounts;
50 
51  bool m_positionOffsetDynamicallyAllocated;
52  bool m_normalOffsetDynamicallyAllocated;
53  bool m_uvOffsetDynamicallyAllocated[POD_MESH_MAX_UV_CHANNELS];
54  bool m_indexDataDynamicallyAllocated;
55  bool m_boneIndexDataDynamicallyAllocated;
56  bool m_boneWeightDataDynamicallyAllocated;
57 
58  public:
59  PODMesh();
60  ~PODMesh();
61 
62  void SetNumVertices(u32 numVertices);
63  void SetNumIndices(u32 numIndices);
64  void SetNumUVChannels(u32 numIndices);
65 
66  void SetPositionData(u32 offset, u32 stride, bool dynamicallyAllocated);
67  void SetNormalData(u32 offset, u32 stride, bool dynamicallyAllocated);
68  void SetUVData(u32 channel, u32 offset, u32 strid, bool dynamicallyAllocatede);
69 
70  void SetInterleavedData(void* pInterleavedData);
71  void SetIndexData(void* pIndexData, bool dynamicallyAllocated);
72 
73  void SetStripLengths(u32* pStripLengths);
74  void SetNumStrips(u32 numStrips);
75 
76  void SetBoneIndexData(u8* pBoneIndexData, u32 boneIndexStride, u32 numBonesVert, bool dynamicallyAllocated);
77  void SetBoneWeightData(u8* pBoneWeightData, u32 stride, u32 numWeights, bool dynamicallyAllocated);
78  void SetBatches(s32* pBatches);
79  void SetBatchOffsets(s32* pBatchOffsets);
80  void SetBatchBoneCounts(s32* pBatchBoneCounts);
81  void SetBatchMax(u32 batchMax);
82  void SetBatchCount(u32 batchCount);
83 
84  u32 GetNumVertices() const;
85  u32 GetNumIndices() const;
86  u32 GetNumUVChannels() const;
87 
88  u32 GetPositionStride() const;
89  u32 GetPositionOffset() const;
90 
91  u32 GetNormalStride() const;
92  u32 GetNormalOffset() const;
93 
94  u32 GetUVStride(u32 channel) const;
95  u32 GetUVOffset(u32 channel) const;
96 
97  const void* GetInterleavedData() const;
98  const void* GetIndexData() const;
99  size_t GetIndexDataSize() const;
100 
101  u32 GetNumStrips() const;
102  const u32* GetStripLengths() const;
103 
104  const u8* GetBoneIndexData() const;
105  size_t GetBoneIndexDataSize() const;
106  u32 GetNumBonesVert() const;
107 
108  const u8* GetBoneWeightData() const;
109  size_t GetBoneWeightDataSize() const;
110 
111  const s32* GetBoneBatchCounts() const;
112  };
113  }
114  }
115 }