"L. Spiro Engine"
|
00001 00017 #ifndef __LSG_SHADERSCOPE_H__ 00018 #define __LSG_SHADERSCOPE_H__ 00019 00020 #include "../LSGGraphicsLib.h" 00021 #include "Map/LSTLMap.h" 00022 #include "MultiMap/LSTLMultiMap.h" 00023 #include "String/LSTLString.h" 00024 #include "Vector/LSTLVectorPoD.h" 00025 00026 namespace lsg { 00027 00035 class CShaderScope { 00036 public : 00037 // == Various constructors. 00038 LSE_CALLCTOR CShaderScope(); 00039 LSE_CALLCTOR ~CShaderScope(); 00040 00041 00042 // == Enumerations. 00046 enum LSG_TYPE { 00047 LSG_T_VARIABLE, // A LSG_VARIABLE object. 00048 LSG_T_FUNCTION, // A LSG_FUNCTION object. 00049 LSG_T_STRUCT, // A LSG_STRUCT object. 00050 LSG_T_UNDEFINED, // Unknown type. May not end up using this, but keep it in case for future expansion. 00051 }; 00052 00053 00054 // == Types. 00058 typedef struct LSG_VARIABLE { 00063 LSUINT32 ui32Name; 00064 00068 LSUINT64 ui64Qualifiers; 00069 00073 LSUINT64 ui64Type; 00074 00078 LSUINT32 ui32Array; 00079 00083 LSUINT32 ui32Semantic; 00084 00089 LSUINT32 ui32DeclNode; 00090 } * LPLSG_VARIABLE, * const LPCLSG_VARIABLE; 00091 00095 typedef struct LSG_FUNCTION { 00100 LSUINT32 ui32Name; 00101 00105 LSUINT64 ui64Qualifiers; 00106 00110 LSUINT64 ui64Type; 00111 00115 LSUINT32 ui32ParmCount; 00116 00121 LSUINT32 ui32DeclNode; 00122 } * LPLSG_FUNCTION, * const LPCLSG_FUNCTION; 00123 00127 typedef struct LSG_STRUCT { 00132 LSUINT32 ui32Name; 00133 00138 LSUINT32 ui32DeclNode; 00139 } * LPLSG_STRUCT, * const LPCLSG_STRUCT; 00140 00145 typedef struct LSG_TYPE_AND_INDEX { 00149 LSG_TYPE tType; 00150 00154 LSUINT32 ui32Index; 00155 } * LPLSG_TYPE_AND_INDEX, * const LPCLSG_TYPE_AND_INDEX; 00156 00157 00158 // == Operators. 00165 CShaderScope & LSE_CALL operator = ( const CShaderScope &_ssOther ); 00166 00167 00168 // == Functions. 00176 LSBOOL LSE_CALL AddVariable( const CString &_sName, const LSG_VARIABLE &_vVar ); 00177 00185 LSBOOL LSE_CALL AddFunction( const CString &_sName, const LSG_FUNCTION &_fFunc ); 00186 00194 LSBOOL LSE_CALL AddStruct( const CString &_sName, const LSG_STRUCT &_sStruct ); 00195 00202 const LSG_VARIABLE & LSE_CALL GetVariable( LSUINT32 _ui32Index ) const; 00203 00210 const LSG_FUNCTION & LSE_CALL GetFunction( LSUINT32 _ui32Index ) const; 00211 00218 const LSG_STRUCT & LSE_CALL GetStruct( LSUINT32 _ui32Index ) const; 00219 00227 LSBOOL LSE_CALL IdentifierExistsAs( LSG_TYPE _tType, const CString &_sName ) const; 00228 00240 LSBOOL LSE_CALL GetIdentifiersAs( LSG_TYPE _tType, const CString &_sName, CVectorPoD<LSG_TYPE_AND_INDEX> &_vRet ) const; 00241 00249 LSBOOL LSE_CALL CreateNameAssociation( const CString &_sOldName, const LSCHAR * _pcNewName ); 00250 00258 LSBOOL LSE_CALL GetNameAssociation( const CString &_sName, const LSCHAR * &_pcNew ) const; 00259 00260 00261 protected : 00262 // == Members. 00266 CVectorPoD<LSG_VARIABLE> m_vVariables; 00267 00271 CVectorPoD<LSG_FUNCTION> m_vFuncs; 00272 00276 CVectorPoD<LSG_STRUCT> m_vStructs; 00277 00282 CMultiMap<CString, LSG_TYPE_AND_INDEX> m_mmTypeMap; 00283 00287 CMap<CString, CString> m_mNameAssociations; 00288 }; 00289 00290 } // namespace lsg 00291 00292 #endif // __LSG_SHADERSCOPE_H__