"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSGraphicsLib/Src/VertexBuffer/LSGVertexBufferBase.h

00001 
00019 #ifndef __LSG_VERTEXBUFFERBASE_H__
00020 #define __LSG_VERTEXBUFFERBASE_H__
00021 
00022 #include "../LSGGraphicsLib.h"
00023 #include "Allocator/LSTLAllocator.h"
00024 
00025 namespace lsg {
00026 
00027         // == Enumerations.
00031         enum LSG_VERTEX_BUFFER_USAGE_TYPES {
00032                 LSG_VBUT_SETONLY                                                                = (1 << 0),                                                             
00033                 LSG_VBUT_STANDARD                                                               = (1 << 1),                                                             
00034                 LSG_VBUT_DYNAMIC                                                                = (1 << 2),                                                             
00036                 LSG_VBUT_MASK                                                                   = (LSG_VBUT_SETONLY | LSG_VBUT_STANDARD | LSG_VBUT_DYNAMIC),
00037                 LSG_VBUT_FORCE_DWORD                                                    = 0x7FFFFFFF
00038         };
00039 
00043         enum LSG_VERTEX_BUFFER_ACCESS_FLAGS {
00044                 LSG_VBAF_READ_ONLY                                                              = (1 << 7),                                                             
00045                 LSG_VBAF_READ_WRITE                                                             = (1 << 8),                                                             
00047                 LSG_VBAF_MASK                                                                   = (LSG_VBAF_READ_ONLY | LSG_VBAF_READ_WRITE),
00048                 LSG_VBAF_FORCE_DWORD                                                    = 0x7FFFFFFF
00049         };
00050 
00054         enum LSG_VERTEX_BUFFER_PRIMITIVES {
00055                 LSG_VBP_TRIANGLELIST                                                    = (1 << 9),                                                             
00056                 LSG_VBP_TRIANGLESTRIP                                                   = (1 << 10),                                                    
00058                 LSG_VBP_MASK                                                                    = (LSG_VBP_TRIANGLELIST | LSG_VBP_TRIANGLESTRIP),
00059                 LSG_VBP_FORCE_DWORD                                                             = 0x7FFFFFFF
00060         };
00061 
00065         enum LSG_VERTEX_ATTRIBUTES {
00066                 LSG_VA_POSITION,
00067                 LSG_VA_POSITIONW,
00068                 LSG_VA_NORMAL,
00069                 LSG_VA_COLOR,
00070                 LSG_VA_ALPHA,
00071                 LSG_VA_TEX,
00072                 LSG_VA_FOGCOORD,
00073                 LSG_VA_BINORMAL,
00074                 LSG_VA_TANGENT,
00075                 LSG_VA_BLENDWEIGHT,
00076                 LSG_VA_BLENDINDICES,
00077                 LSG_VA_1FLOAT_TEX,
00078                 LSG_VA_3FLOAT_TEX,
00079                 LSG_VA_4FLOAT_TEX,
00080                 //LSG_VA_1INDEX_TEX,
00081                 //LSG_VA_4INDEX_TEX,
00082 
00083                 LSG_VA_FORCE_DWORD                                                              = 0x7FFFFFFF
00084         };
00085 
00089         enum LSG_VERTEX_BUFFER_METRICS {
00090                 LSG_VBM_MAX_ATTRIBUTES                                                  = 16,
00091                 LSG_VBM_MAX_USAGES                                                              = 16,
00092                 LSG_VBM_MAX_STREAMS                                                             = 16,
00093         };
00094 
00095 
00096         // == Types.
00100         typedef struct LSG_VB_CONTENTS {
00104                 LSUINT8                                                                                 ui8Array[LSG_VBM_MAX_ATTRIBUTES];
00105 
00109                 LSUINT32                                                                                ui32Total;
00110 
00111 
00112                 // == Various constructors.
00113                 LSE_CALL                                                                                LSG_VB_CONTENTS();
00114                 LSE_CALL                                                                                LSG_VB_CONTENTS( LSUINT8 _ui8Type, LSUINT8 _ui8Stream = 0 );
00115 
00116                 // == Operators.
00123                 LSG_VB_CONTENTS & LSE_CALL                                              operator |= ( const LSG_VB_CONTENTS &_vcOther );
00124 
00131                 LSG_VB_CONTENTS LSE_CALL                                                operator | ( const LSG_VB_CONTENTS &_vcOther ) const;
00132 
00139                 LSUINT32 LSE_CALL                                                               operator [] ( LSUINT32 _ui32Index ) const;
00140 
00147                 LSUINT32 LSE_CALL                                                               operator () ( LSUINT32 _ui32Index ) const;
00148 
00156                 LSBOOL LSE_CALL                                                                 operator () ( LSUINT32 _ui32Type, LSUINT32 _ui32Stream ) const;
00157 
00164                 LSBOOL LSE_CALL                                                                 operator & ( LSUINT32 _ui32Attr ) const;
00165         } * LPLSG_VB_CONTENTS, * const LPCLSG_VB_CONTENTS;
00166 
00167 
00168 #ifdef _DEBUG
00169 #define LSG_VB_INTERFACE        virtual
00170 #else   // #ifdef _DEBUG
00171 #define LSG_VB_INTERFACE
00172 #endif  // #ifdef _DEBUG
00173 
00183         class CVertexBufferBase {
00184                 // Rendering of the vertex buffer is handled by CFnd.  This allows the foundation to update its render state
00185                 //      in preparation for the render.
00186                 friend class                                                                    CFnd;
00187         public :
00188                 // == Various constructors.
00189                 LSE_CALLCTOR                                                                    CVertexBufferBase();
00190                 LSE_CALLCTOR                                                                    ~CVertexBufferBase();
00191 
00192 
00193                 // == Functions.
00197                 LSVOID LSE_CALL                                                                 Reset();
00198                 
00204                 LSE_INLINE const LSG_VB_CONTENTS & LSE_CALL             Contents() const;
00205 
00206         protected :
00207                 // == Members.
00211                 LSG_VB_CONTENTS                                                                 m_vcContents;
00212 
00216                 LSUINT32                                                                                m_ui32Lock;
00217 
00221                 LSBOOL                                                                                  m_bFinalized;
00222 
00226                 LSUINT16                                                                                m_ui16UsageAndAccess;
00227 
00231                 LSUINT16                                                                                m_ui16ElementSize;
00232 
00236                 LSUINT32                                                                                m_ui32Stride;
00237 
00241                 LSUINT32                                                                                m_ui32Elements;
00242 
00246                 LSUINT32                                                                                m_ui32PrimitiveCount;
00247 
00251                 LSUINT32                                                                                m_ui32Id;
00252 
00256                 CVectorPoD<LSUINT8, LSUINT32, 1024UL>                   m_vData;
00257 
00261                 CVectorPoD<LSUINT16, LSUINT8, 1UL>                              m_vAttributeOffsets[LSG_VBM_MAX_ATTRIBUTES];
00262 
00266                 static LSUINT32                                                                 m_ui32VertIdCounter;
00267 
00271                 static CCriticalSection                                                 m_csCrit;
00272 
00273 
00274                 // == Functions.
00275         };
00276 
00277 
00278         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00279         // DEFINITIONS
00280         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00281         // == Functions.
00287         LSE_INLINE const LSG_VB_CONTENTS & LSE_CALL CVertexBufferBase::Contents() const {
00288                 return m_vcContents;
00289         }
00290 
00291 }       // namespace lsg
00292 
00293 #endif  // __LSG_VERTEXBUFFERBASE_H__
00294 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator