"L. Spiro Engine"
|
00001 00021 #ifndef __LSG_DIRECTX9SHADER_H__ 00022 #define __LSG_DIRECTX9SHADER_H__ 00023 00024 #include "../LSGGraphicsLib.h" 00025 #include "../ShaderLanguage/LSGShaderBase.h" 00026 #include "LSGDirectX9PixelShader.h" 00027 #include "LSGDirectX9ShaderTranslator.h" 00028 #include "LSGDirectX9VertexShader.h" 00029 00030 #if defined( LSG_DX9 ) 00031 00032 namespace lsg { 00033 00034 class CDirectX9ShaderManager; 00035 00047 class CDirectX9Shader : public CShaderBase { 00048 public : 00049 // == Various constructors. 00050 LSE_CALLCTOR CDirectX9Shader(); 00051 virtual LSE_CALLCTOR ~CDirectX9Shader(); 00052 00053 00054 // == Functions. 00058 LSVOID LSE_CALL Reset(); 00059 00067 virtual LSUINT64 LSE_CALL GetId() const; 00068 00076 virtual LSBOOL LSE_CALL Activate( LSVOID * _pvSysValue ); 00077 00081 virtual LSVOID LSE_CALL Deactivate(); 00082 00089 virtual LSG_HANDLE LSE_CALL GetConstantByName( const LSCHAR * _pcName ); 00090 00098 virtual LSBOOL LSE_CALL SetFloat( CShaderBase::LSG_HANDLE _hHandle, LSFLOAT _fValue ); 00099 00108 virtual LSBOOL LSE_CALL SetFloatArray( LSG_HANDLE _hHandle, const LSFLOAT * _pfValues, LSUINT32 _ui32Total ); 00109 00117 virtual LSBOOL LSE_CALL SetInt( LSG_HANDLE _hHandle, LSINT32 _iValue ); 00118 00127 virtual LSBOOL LSE_CALL SetIntArray( LSG_HANDLE _hHandle, const LSINT32 * _piValues, LSUINT32 _ui32Total ); 00128 00136 virtual LSBOOL LSE_CALL SetBool( LSG_HANDLE _hHandle, LSBOOL _bValue ); 00137 00146 virtual LSBOOL LSE_CALL SetBoolArray( LSG_HANDLE _hHandle, const LSBOOL * _pbValues, LSUINT32 _ui32Total ); 00147 00155 virtual LSBOOL LSE_CALL SetVector2( LSG_HANDLE _hHandle, const CVector2 &_vValue ); 00156 00165 virtual LSBOOL LSE_CALL SetVector2Array( LSG_HANDLE _hHandle, const CVector2 * _pvValues, LSUINT32 _ui32Total ); 00166 00174 virtual LSBOOL LSE_CALL SetVector3( LSG_HANDLE _hHandle, const CVector3 &_vValue ); 00175 00184 virtual LSBOOL LSE_CALL SetVector3Array( LSG_HANDLE _hHandle, const CVector3 * _pvValues, LSUINT32 _ui32Total ); 00185 00193 virtual LSBOOL LSE_CALL SetVector4( LSG_HANDLE _hHandle, const CVector4 &_vValue ); 00194 00203 virtual LSBOOL LSE_CALL SetVector4Array( LSG_HANDLE _hHandle, const CVector4 * _pvValues, LSUINT32 _ui32Total ); 00204 00212 virtual LSBOOL LSE_CALL SetMatrix2x2( LSG_HANDLE _hHandle, const CMatrix2x2 &_mValue ); 00213 00221 virtual LSBOOL LSE_CALL SetMatrix3x3( LSG_HANDLE _hHandle, const CMatrix3x3 &_mValue ); 00222 00230 virtual LSBOOL LSE_CALL SetMatrix4x4( LSG_HANDLE _hHandle, const CMatrix4x4 &_mValue ); 00231 00240 virtual LSBOOL LSE_CALL SetMatrix4x4Array( LSG_HANDLE _hHandle, const CMatrix4x4 * _pmValues, LSUINT32 _ui32Total ); 00241 00242 00243 protected : 00244 // == Types. 00248 typedef struct LSG_DX9_SHADER_HANDLE { 00252 LSG_HANDLE hVertexHandle; 00253 00257 LSG_HANDLE hPixelHandle; 00258 00262 LSUINT32 ui32Name; 00263 00268 CShaderLanguageParser::LSG_SHADER_TYPES stType; 00269 } * LPLSG_DX9_SHADER_HANDLE, * const LPCLSG_DX9_SHADER_HANDLE; 00270 00271 00272 // == Members. 00276 CDirectX9VertexShader * m_pdx9vsVertexShader; 00277 00281 CDirectX9PixelShader * m_pdx9psPixelShader; 00282 00286 CVectorPoD<LSG_DX9_SHADER_HANDLE> m_vHandles; 00287 00291 CDirectX9ShaderManager * m_pdx9smShaderManager; 00292 00293 00294 // == Functions. 00298 virtual LSVOID LSE_CALL CreateTranslator(); 00299 00303 virtual LSVOID LSE_CALL DestroyTranslator(); 00304 00311 virtual LSG_SHADER_ERRORS LSE_CALL PostCompile( CString &_sError ); 00312 00313 00314 private : 00315 typedef CShaderBase Parent; 00316 }; 00317 00318 } // namespace lsg 00319 00320 #endif // #if defined( LSG_DX9 ) 00321 00322 #endif // __LSG_DIRECTX9SHADER_H__ 00323