"L. Spiro Engine"
|
00001 00018 #ifndef __LSG_DIRECTX10COMPILEDSHADER_H__ 00019 #define __LSG_DIRECTX10COMPILEDSHADER_H__ 00020 00021 #include "../LSGGraphicsLib.h" 00022 #include "../ShaderLanguage/LSGCompiledShaderBase.h" 00023 #include "../ShaderLanguage/LSGShaderBase.h" 00024 00025 #ifdef LSG_DX10 00026 00027 namespace lsg { 00028 00038 class CDirectX10CompiledShader : public CCompiledShaderBase { 00039 public : 00040 // == Various constructors. 00041 LSE_CALLCTOR CDirectX10CompiledShader(); 00042 LSE_CALLCTOR ~CDirectX10CompiledShader(); 00043 00044 00045 // == Functions. 00049 virtual LSVOID LSE_CALL Reset(); 00050 00057 LSBOOL LSE_CALL SetUniforms( const CShaderTranslationProcessorBase::LSG_UNIFORM_LIST &_ulUniforms ); 00058 00065 CShaderBase::LSG_HANDLE LSE_CALL GetConstantByName( const LSCHAR * _pcName ); 00066 00074 LSBOOL LSE_CALL SetFloat( CShaderBase::LSG_HANDLE _hHandle, LSFLOAT _fValue ); 00075 00084 LSBOOL LSE_CALL SetFloatArray( CShaderBase::LSG_HANDLE _hHandle, const LSFLOAT * _pfValues, LSUINT32 _ui32Total ); 00085 00093 LSBOOL LSE_CALL SetInt( CShaderBase::LSG_HANDLE _hHandle, LSINT32 _iValue ); 00094 00103 LSBOOL LSE_CALL SetIntArray( CShaderBase::LSG_HANDLE _hHandle, const LSINT32 * _piValues, LSUINT32 _ui32Total ); 00104 00112 LSBOOL LSE_CALL SetBool( CShaderBase::LSG_HANDLE _hHandle, LSBOOL _bValue ); 00113 00122 LSBOOL LSE_CALL SetBoolArray( CShaderBase::LSG_HANDLE _hHandle, const LSBOOL * _pbValues, LSUINT32 _ui32Total ); 00123 00131 LSBOOL LSE_CALL SetVector2( CShaderBase::LSG_HANDLE _hHandle, const CVector2 &_vValue ); 00132 00141 LSBOOL LSE_CALL SetVector2Array( CShaderBase::LSG_HANDLE _hHandle, const CVector2 * _pvValues, LSUINT32 _ui32Total ); 00142 00150 LSBOOL LSE_CALL SetVector3( CShaderBase::LSG_HANDLE _hHandle, const CVector3 &_vValue ); 00151 00160 LSBOOL LSE_CALL SetVector3Array( CShaderBase::LSG_HANDLE _hHandle, const CVector3 * _pvValues, LSUINT32 _ui32Total ); 00161 00169 LSBOOL LSE_CALL SetVector4( CShaderBase::LSG_HANDLE _hHandle, const CVector4 &_vValue ); 00170 00179 LSBOOL LSE_CALL SetVector4Array( CShaderBase::LSG_HANDLE _hHandle, const CVector4 * _pvValues, LSUINT32 _ui32Total ); 00180 00188 LSBOOL LSE_CALL SetMatrix2x2( CShaderBase::LSG_HANDLE _hHandle, const CMatrix2x2 &_mValue ); 00189 00197 LSBOOL LSE_CALL SetMatrix3x3( CShaderBase::LSG_HANDLE _hHandle, const CMatrix3x3 &_mValue ); 00198 00206 LSBOOL LSE_CALL SetMatrix4x4( CShaderBase::LSG_HANDLE _hHandle, const CMatrix4x4 &_mValue ); 00207 00216 LSBOOL LSE_CALL SetMatrix4x4Array( CShaderBase::LSG_HANDLE _hHandle, const CMatrix4x4 * _pmValues, LSUINT32 _ui32Total ); 00217 00223 LSE_INLINE const void * LSE_CALL GetBufferPointer() const; 00224 00230 LSE_INLINE SIZE_T LSE_CALL GetBufferSize() const; 00231 00232 00233 protected : 00234 // == Types. 00238 typedef struct LSG_CONSTANT_MAP { 00242 LSUINT32 ui32Name; 00243 00247 LSUINT32 ui32CBufferIndex; 00248 00252 LSUINT32 ui32DataPtr; 00253 } * LPLSG_CONSTANT_MAP, * const LPCLSG_CONSTANT_MAP; 00254 00258 typedef struct LSG_CS_CBUFFER { 00262 LSBOOL bDirty; 00263 00267 CVector<LSUINT8, LSUINT32> vRaw; 00268 } * LPLSG_CS_CBUFFER, * const LPCLSG_CS_CBUFFER; 00269 00270 00271 // == Members. 00275 ID3D10Blob * m_pbShader; 00276 00280 CVectorPoD<ID3D10Buffer *> m_vConstantBuffers; 00281 00285 CVector<LSG_CS_CBUFFER> m_vConstBufferRawData; 00286 00290 CShaderTranslationProcessorBase::LSG_UNIFORM_LIST m_ulUniforms; 00291 00295 CVectorPoD<LSG_CONSTANT_MAP> m_vConstantMap; 00296 00300 CVectorPoD<LSUINT8, LSUINT32> m_vTempBuffer; 00301 00302 00303 // == Functions. 00304 00305 00306 private : 00307 typedef CCompiledShaderBase Parent; 00308 }; 00309 00310 00311 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00312 // DEFINITIONS 00313 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00314 // == Functions. 00320 LSE_INLINE const void * LSE_CALL CDirectX10CompiledShader::GetBufferPointer() const { 00321 return m_pbShader ? m_pbShader->GetBufferPointer() : NULL; 00322 } 00323 00329 LSE_INLINE SIZE_T LSE_CALL CDirectX10CompiledShader::GetBufferSize() const { 00330 return m_pbShader ? m_pbShader->GetBufferSize() : 0UL; 00331 } 00332 00333 } // namespace lsg 00334 00335 #endif // #ifdef LSG_DX10 00336 00337 #endif // __LSG_DIRECTX10COMPILEDSHADER_H__