"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSModelLib/Src/Shaders/LSDModelShaderManager.h

00001 
00016 #ifndef __LSD_MODELSHADERMANAGER_H__
00017 #define __LSD_MODELSHADERMANAGER_H__
00018 
00019 #include "../LSDModelLib.h"
00020 #include "CriticalSection/LSHCriticalSection.h"
00021 #include "Map/LSTLMap.h"
00022 #include "ShaderLanguage/LSGShader.h"
00023 
00024 namespace lsd {
00025 
00026         // == Macros.
00030 #define LSD_SF_NORMALS                                                                  (1UL << 0ULL)                   
00031 #define LSD_SF_VERTCOLORS                                                               (1UL << 1ULL)                   
00032 #define LSD_SF_TEX2D0                                                                   (1UL << 2ULL)                   
00033 #define LSD_SF_TEX2D1                                                                   (1UL << 3ULL)                   
00034 #define LSD_SF_TEX2D2                                                                   (1UL << 4ULL)                   
00035 #define LSD_SF_TEX2D3                                                                   (1UL << 5ULL)                   
00036 #define LSD_SF_TEX2D4                                                                   (1UL << 6ULL)                   
00037 #define LSD_SF_TEX2D5                                                                   (1UL << 7ULL)                   
00038 #define LSD_SF_TEX2D6                                                                   (1UL << 8ULL)                   
00039 #define LSD_SF_TEX2D7                                                                   (1UL << 9ULL)                   
00040 #define LSD_SF_DIFFUSETEX                                                               (1UL << 10ULL)                  
00041 #define LSD_SF_TRANSTEX                                                                 (1UL << 11ULL)                  
00042 #define LSD_SF_NORMALTEX                                                                (1UL << 12ULL)                  
00043 #define LSD_SF_SPECULARTEX                                                              (1UL << 13ULL)                  
00044 #define LSD_SF_EMISSIVE                                                                 (1UL << 15ULL)                  
00045 #define LSD_SF_ALPHA                                                                    (1UL << 16ULL)                  
00046 #define LSD_SF_HEMISLIGHTING                                                    (1UL << 17ULL)                  
00047 #define LSD_SF_LIGHTING                                                                 (1UL << 18ULL)                  
00048 #define LSD_SF_SHADOWMAP                                                                (1UL << 19ULL)                  
00049 #define LSD_SF_MAKE_DEPTH_COPY                                                  (1UL << 20ULL)                  
00050 #define LSD_SF_MAKE_NORMAL_COPY                                                 (1UL << 21ULL)                  
00051 #define LSD_SF_MAKE_COLORED_SHADOW                                              (1UL << 22ULL)                  
00052 #define LSD_SF_CELL_LIGHTING                                                    (1UL << 23ULL)                  
00053 #define LSD_SF_BRDF_LIGHTING                                                    (1UL << 24ULL)                  
00058         enum LSD_TEXTURE_TYPES {
00059                 LSD_TT_DIFFUSE_TEXTURE,                                                                                                 
00060                 LSD_TT_TRANS_TEXTURE,                                                                                                   
00061                 LSD_TT_NORMAL_TEXTURE,                                                                                                  
00062                 LSD_TT_SPECULAR_TEXTURE,                                                                                                
00063                 LSD_TT_TOTAL,                                                                                                                   
00064         };
00065 
00072         class CModelShaderManager {
00073         public :
00074                 // == Types.
00078                 typedef struct LSD_SHADER_FLAGS {
00082                         LSUINT64                                                                        ui64Flags;
00083 
00087                         LSUINT8                                                                         ui8TexSlots[LSD_TT_TOTAL];
00088 
00092                         LSUINT8                                                                         ui8TexCoords[LSD_TT_TOTAL];
00093 
00094 
00095                         // == Various constructors.
00096                         LSE_CALLCTOR                                                            LSD_SHADER_FLAGS();
00097 
00098 
00099                         // == Operators.
00106                         LSBOOL LSE_CALL                                                         operator < ( const LSD_SHADER_FLAGS &_sfOther ) const;
00107 
00114                         LSBOOL LSE_CALL                                                         operator == ( const LSD_SHADER_FLAGS &_sfOther ) const;
00115 
00122                         LSBOOL LSE_CALL                                                         operator != ( const LSD_SHADER_FLAGS &_sfOther ) const;
00123                 } * LPLSD_SHADER_FLAGS, * const LPCLSD_SHADER_FLAGS;
00124 
00125 
00126                 // == Functions.
00133                 static CSharedShaderPtr LSE_CALL                                GetForwardRenderShader( const LSD_SHADER_FLAGS &_sfFlags );
00134 
00141                 static CSharedShaderPtr LSE_CALL                                GetForwardRenderShaderVL( const LSD_SHADER_FLAGS &_sfFlags );
00142 
00149                 static CSharedShaderPtr LSE_CALL                                GetShadowMapShader( const LSD_SHADER_FLAGS &_sfFlags );
00150 
00154                 static LSVOID LSE_CALL                                                  DeleteUnrefedShaders();
00155 
00156         protected :
00157                 // == Members.
00161                 static CMap<LSD_SHADER_FLAGS, CSharedShaderPtr>
00162                                                                                                                 m_mForwardShaders;
00163 
00167                 static CMap<LSD_SHADER_FLAGS, CSharedShaderPtr>
00168                                                                                                                 m_mForwardShadowMapShaders;
00169 
00173                 static CMap<CString, CVector<LSUINT8, LSUINT32> >
00174                                                                                                                 m_mFileMap;
00175 
00179                 static CCriticalSection                                                 m_csCrit;
00180 
00181 
00182                 // == Functions.
00191                 static CSharedShaderPtr LSE_CALL                                NewShader( const LSD_SHADER_FLAGS &_sfFlags, const LSCHAR *_pcVertexFile, const LSCHAR *_pcPixelFile );
00192 
00200                 static LSBOOL LSE_CALL                                                  GenerateMacros( CShader &_sShader, const LSD_SHADER_FLAGS &_sfFlags );
00201         };
00202 
00203 }       // namespace lsd
00204 
00205 #endif  // __LSD_MODELSHADERMANAGER_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator