"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSModelLib/Src/Models/LSDIntermediateSharedMesh.h

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__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator