"L. Spiro Engine"
|
00001 00018 #ifndef __LSD_INTERMEDIATESHAREDMESH_H__ 00019 #define __LSD_INTERMEDIATESHAREDMESH_H__ 00020 00021 #include "../LSDModelLib.h" 00022 #include "Misc/LSCMisc.h" 00023 #include "Streams/LSSTDStream.h" 00024 #include "String/LSTLString.h" 00025 #include "Vector/LSTLVector.h" 00026 00027 namespace lsd { 00028 00037 class CIntermediateSharedMesh { 00038 public : 00039 // == Various constructors. 00040 LSE_CALLCTOR CIntermediateSharedMesh(); 00041 LSE_CALLCTOR ~CIntermediateSharedMesh(); 00042 00043 00044 // == Types. 00048 typedef struct LSD_UV_LAYER { 00052 CString sName; 00053 00057 CVectorPoD<CVector2, LSUINT32> vUvs; 00058 00059 00060 // == Operators. 00067 LSD_UV_LAYER & LSE_CALL operator = ( const LSD_UV_LAYER &_ulOther ); 00068 00069 00070 // == Functions. 00074 LSVOID LSE_CALL Trash(); 00075 } * LPLSD_UV_LAYER, * const LPCLSD_UV_LAYER; 00076 00080 typedef struct LSD_VERTEX { 00084 LSUINT32 ui32Vert; 00085 00089 LSUINT32 ui32Normal; 00090 00094 LSUINT32 ui32Color; 00095 00099 LSUINT32 ui32Uvs[LSD_M_MAX_LAYERS]; 00100 00101 00102 // == Operators. 00109 LSD_VERTEX & LSE_CALL operator = ( const LSD_VERTEX &_vOther ); 00110 } * LPLSD_VERTEX, * const LPCLSD_VERTEX; 00111 00115 typedef struct LSD_FACE { 00119 CVectorPoD<LSD_VERTEX, LSUINT16, 1024UL> 00120 vVerts; 00121 00125 CVectorPoD<CString, LSUINT16> vMaterial; 00126 00127 00128 // == Operators. 00135 LSD_FACE & LSE_CALL operator = ( const LSD_FACE &_fOther ); 00136 00137 00138 // == Functions. 00142 LSVOID LSE_CALL Trash(); 00143 } * LPLSD_FACE, * const LPCLSD_FACE; 00144 00148 typedef struct LSD_MATERIAL_ARRAY { 00152 CVector<CString, LSUINT32> vArray; 00153 00154 00155 // == Operators. 00162 LSD_MATERIAL_ARRAY & LSE_CALL operator = ( const LSD_MATERIAL_ARRAY &_maOther ); 00163 00164 00165 // == Functions. 00169 LSVOID LSE_CALL Trash(); 00170 } * LPLSD_MATERIAL_ARRAY, * const LPCLSD_MATERIAL_ARRAY; 00171 00172 00173 // == Operators. 00180 CIntermediateSharedMesh & LSE_CALL operator = ( const CIntermediateSharedMesh &_ismOther ); 00181 00182 00183 // == Functions. 00192 LSSTD_ERRORS LSE_CALL LoadFromStream( const lsstd::IStream &_sStream, CAllocator * _paAllocator, LSUINT32 _ui32Version ); 00193 00199 LSVOID LSE_CALL SetAllocator( CAllocator * _paAllocator ); 00200 00204 LSVOID LSE_CALL Reset(); 00205 00209 LSVOID LSE_CALL Trash(); 00210 00216 const CVectorPoD<CVector3, LSUINT32> & LSE_CALL 00217 GetVertices() const; 00218 00224 CVectorPoD<CVector3, LSUINT32> & LSE_CALL 00225 Vertices(); 00226 00232 const CVectorPoD<CVector3, LSUINT32> & LSE_CALL 00233 GetNormals() const; 00234 00240 CVectorPoD<CVector3, LSUINT32> & LSE_CALL 00241 Normals(); 00242 00248 const CVectorPoD<LSUINT32, LSUINT32> & LSE_CALL 00249 GetColors() const; 00250 00256 CVectorPoD<LSUINT32, LSUINT32> & LSE_CALL 00257 Colors(); 00258 00264 const CVector<CVector<LSD_FACE, LSUINT32> > & LSE_CALL 00265 GetFaces() const; 00266 00272 CVector<CVector<LSD_FACE, LSUINT32> > & LSE_CALL 00273 Faces(); 00274 00280 const CVector<LSD_UV_LAYER, LSUINT32> & LSE_CALL 00281 GetUvLayers() const; 00282 00288 CVector<LSD_UV_LAYER, LSUINT32> & LSE_CALL 00289 UvLayers(); 00290 00296 const CVector<LSD_MATERIAL_ARRAY> & LSE_CALL 00297 GetMaterials() const; 00298 00304 CVector<LSD_MATERIAL_ARRAY> & LSE_CALL Materials(); 00305 00306 protected : 00307 // == Members. 00311 CVectorPoD<CVector3, LSUINT32> m_vVertices; 00312 00316 CVectorPoD<CVector3, LSUINT32> m_vNormals; 00317 00321 CVectorPoD<LSUINT32, LSUINT32> m_vColors; 00322 00326 CVector<LSD_UV_LAYER, LSUINT32> m_vUvLayers; 00327 00331 CVector<LSD_MATERIAL_ARRAY> m_vMaterialLayers; 00332 00336 CVector<CVector<LSD_FACE, LSUINT32> > m_vFaces; 00337 00338 00339 // == Functions. 00347 static LSBOOL LSE_CALL ReadString( const lsstd::IStream &_sStream, CString &_sRet ); 00348 }; 00349 00350 } // namespace lsd 00351 00352 #endif // __LSD_INTERMEDIATESHAREDMESH_H__