"L. Spiro Engine"
|
00001 00021 #ifndef __LSG_DIRECTX11SHADER_H__ 00022 #define __LSG_DIRECTX11SHADER_H__ 00023 00024 #include "../LSGGraphicsLib.h" 00025 #include "../ShaderLanguage/LSGShaderBase.h" 00026 #include "LSGDirectX11PixelShader.h" 00027 #include "LSGDirectX11ShaderTranslator.h" 00028 #include "LSGDirectX11VertexShader.h" 00029 00030 #ifdef LSG_DX11 00031 00032 namespace lsg { 00033 00034 class CDirectX11ShaderManager; 00035 00047 class CDirectX11Shader : public CShaderBase { 00048 public : 00049 // == Various constructors. 00050 LSE_CALLCTOR CDirectX11Shader(); 00051 virtual LSE_CALLCTOR ~CDirectX11Shader(); 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 00086 virtual LSVOID LSE_CALL PreRender(); 00087 00094 virtual LSG_HANDLE LSE_CALL GetConstantByName( const LSCHAR * _pcName ); 00095 00103 virtual LSBOOL LSE_CALL SetFloat( CShaderBase::LSG_HANDLE _hHandle, LSFLOAT _fValue ); 00104 00113 virtual LSBOOL LSE_CALL SetFloatArray( LSG_HANDLE _hHandle, const LSFLOAT * _pfValues, LSUINT32 _ui32Total ); 00114 00122 virtual LSBOOL LSE_CALL SetInt( LSG_HANDLE _hHandle, LSINT32 _iValue ); 00123 00132 virtual LSBOOL LSE_CALL SetIntArray( LSG_HANDLE _hHandle, const LSINT32 * _piValues, LSUINT32 _ui32Total ); 00133 00141 virtual LSBOOL LSE_CALL SetBool( LSG_HANDLE _hHandle, LSBOOL _bValue ); 00142 00151 virtual LSBOOL LSE_CALL SetBoolArray( LSG_HANDLE _hHandle, const LSBOOL * _pbValues, LSUINT32 _ui32Total ); 00152 00160 virtual LSBOOL LSE_CALL SetVector2( LSG_HANDLE _hHandle, const CVector2 &_vValue ); 00161 00170 virtual LSBOOL LSE_CALL SetVector2Array( LSG_HANDLE _hHandle, const CVector2 * _pvValues, LSUINT32 _ui32Total ); 00171 00179 virtual LSBOOL LSE_CALL SetVector3( LSG_HANDLE _hHandle, const CVector3 &_vValue ); 00180 00189 virtual LSBOOL LSE_CALL SetVector3Array( LSG_HANDLE _hHandle, const CVector3 * _pvValues, LSUINT32 _ui32Total ); 00190 00198 virtual LSBOOL LSE_CALL SetVector4( LSG_HANDLE _hHandle, const CVector4 &_vValue ); 00199 00208 virtual LSBOOL LSE_CALL SetVector4Array( LSG_HANDLE _hHandle, const CVector4 * _pvValues, LSUINT32 _ui32Total ); 00209 00217 virtual LSBOOL LSE_CALL SetMatrix2x2( LSG_HANDLE _hHandle, const CMatrix2x2 &_gmValue ); 00218 00226 virtual LSBOOL LSE_CALL SetMatrix3x3( LSG_HANDLE _hHandle, const CMatrix3x3 &_gmValue ); 00227 00235 virtual LSBOOL LSE_CALL SetMatrix4x4( LSG_HANDLE _hHandle, const CMatrix4x4 &_gmValue ); 00236 00245 virtual LSBOOL LSE_CALL SetMatrix4x4Array( LSG_HANDLE _hHandle, const CMatrix4x4 * _pmValues, LSUINT32 _ui32Total ); 00246 00247 00248 protected : 00249 // == Types. 00253 typedef struct LSG_DX11_SHADER_HANDLE { 00257 LSG_HANDLE hVertexHandle; 00258 00262 LSG_HANDLE hPixelHandle; 00263 00267 LSUINT32 ui32Name; 00268 00273 CShaderLanguageParser::LSG_SHADER_TYPES stType; 00274 } * LPLSG_DX11_SHADER_HANDLE, * const LPCLSG_DX11_SHADER_HANDLE; 00275 00276 00277 // == Members. 00281 CDirectX11VertexShader * m_pdx11vsVertexShader; 00282 00286 CDirectX11PixelShader * m_pdx11psPixelShader; 00287 00291 CDirectX11ShaderManager * m_pdx11smShaderManager; 00292 00296 CVectorPoD<LSG_DX11_SHADER_HANDLE> m_vHandles; 00297 00298 00299 // == Functions. 00303 virtual LSVOID LSE_CALL CreateTranslator(); 00304 00308 virtual LSVOID LSE_CALL DestroyTranslator(); 00309 00316 virtual LSG_SHADER_ERRORS LSE_CALL PostCompile( CString &_sError ); 00317 00318 private : 00319 typedef CShaderBase Parent; 00320 }; 00321 00322 } // namespace lsg 00323 00324 #endif // #ifdef LSG_DX11 00325 00326 #endif // __LSG_DIRECTX11SHADER_H__