"L. Spiro Engine"
|
00001 00017 #ifndef __LSG_SHADER_H__ 00018 #define __LSG_SHADER_H__ 00019 00020 #include "../LSGGraphicsLib.h" 00021 #include "../DirectXShaders/LSGDirectX9Shader.h" 00022 #include "../DirectXShaders/LSGDirectX10Shader.h" 00023 #include "../DirectXShaders/LSGDirectX11Shader.h" 00024 #include "../Fnd/LSGFnd.h" 00025 #include "../OpenGLEsShaders/LSGOpenGlEsShader.h" 00026 #include "../OpenGLShaders/LSGOpenGlShader.h" 00027 #include "SharedPtr/LSTLSharedPtr.h" 00028 00029 namespace lsg { 00030 00038 class CShader : public 00039 #ifdef LSG_OGL 00040 COpenGlShader 00041 #endif // #ifdef LSG_OGL 00042 #ifdef LSG_OGLES 00043 COpenGlEsShader 00044 #endif // #ifdef LSG_OGLES 00045 #ifdef LSG_DX9 00046 CDirectX9Shader 00047 #endif // #ifdef LSG_DX9 00048 #ifdef LSG_DX10 00049 CDirectX10Shader 00050 #endif // #ifdef LSG_DX10 00051 #ifdef LSG_DX11 00052 CDirectX11Shader 00053 #endif // #ifdef LSG_DX11 00054 { 00055 friend class CFnd; 00056 public : 00057 // == Various constructors. 00058 LSE_CALLCTOR CShader(); 00059 virtual LSE_CALLCTOR ~CShader(); 00060 00061 00062 // == Types. 00066 typedef struct LSG_LIGHT_FULLDATA { 00070 LSUINT32 ui32TotalLights; 00071 00075 LSUINT32 ui32DirLights; 00076 00080 LSUINT32 ui32PointLights; 00081 00085 LSUINT32 ui32SpotLights; 00086 00091 CVector4 gvLightVectors[LSG_MAX_LIGHTS]; 00092 00096 CVector3 gvSpotDirs[LSG_MAX_LIGHTS]; 00097 00101 CVector4 gvAmbient[LSG_MAX_LIGHTS]; 00102 00106 CVector4 gvDiffuse[LSG_MAX_LIGHTS]; 00107 00111 CVector4 gvSpecular[LSG_MAX_LIGHTS]; 00112 00116 CVector4 gvAtt[LSG_MAX_LIGHTS]; 00117 00121 CVector4 gvSpots[LSG_MAX_LIGHTS]; 00122 00126 CVector4 gcAmbientLight; 00127 00131 CVector4 gcSkyColor; 00132 00136 CVector4 gcGroundColor; 00137 00141 LSUINT32 ui32DirtyCounter; 00142 } * LPLSG_LIGHT_DATA, * const LPCLSG_LIGHT_DATA; 00143 00147 typedef struct LSG_FOG { 00151 LSG_FOG_TYPE ftType; 00152 00156 LSREAL cColor[3]; 00157 00161 struct { 00162 LSREAL fStart, 00163 fEnd; 00164 } sLinear; 00168 struct { 00169 LSREAL fDensity; 00170 } sExp; 00171 } * LPLSG_FOG, * const LPCLSG_FOG; 00172 00173 00174 // == Functions. 00178 LSVOID LSE_CALL Reset(); 00179 00187 virtual LSG_SHADER_ERRORS LSE_CALL PostCompile( CString &_sError ); 00188 00196 virtual LSBOOL LSE_CALL Activate( LSVOID * _pvSysValue ); 00197 00198 00199 protected : 00200 // == Types. 00204 typedef struct LSG_ENGINE_UNIFORMS { 00208 LSG_HANDLE hWorldMatrix; 00209 00213 LSG_HANDLE hWorldViewMatrix; 00214 00218 LSG_HANDLE hWorldViewProjMatrix; 00219 00223 LSG_HANDLE hViewMatrix; 00224 00228 LSG_HANDLE hTimeSinceLastFrame; 00229 00233 LSG_HANDLE hNormalMatrix; 00234 00238 LSG_HANDLE hTotalLights; 00239 00243 LSG_HANDLE hDirLights; 00244 00248 LSG_HANDLE hPointLights; 00249 00253 LSG_HANDLE hSpotLights; 00254 00258 LSG_HANDLE hLightVectors; 00259 00263 LSG_HANDLE hLightHalfVectors; 00264 00268 LSG_HANDLE hSpotLightVectors; 00269 00273 LSG_HANDLE hAttenuations; 00274 00278 LSG_HANDLE hSpotLight; 00279 00283 LSG_HANDLE hLightAmbients; 00284 00288 LSG_HANDLE hLightDiffuses; 00289 00293 LSG_HANDLE hLightSpeculars; 00294 00298 LSG_HANDLE hAmbientLight; 00299 00303 LSG_HANDLE hSkyColor; 00304 00308 LSG_HANDLE hGroundColor; 00309 00313 LSG_HANDLE hDiffuseMaterial; 00314 00318 LSG_HANDLE hAmbientMaterial; 00319 00323 LSG_HANDLE hEmissiveMaterial; 00324 00328 LSG_HANDLE hSpecularMaterial; 00329 00333 LSG_HANDLE hPower; 00334 00338 LSG_HANDLE hRoughness; 00339 00343 LSG_HANDLE hAnisotropy; 00344 00348 LSG_HANDLE hTexUnits[LSG_MAX_TEXTURE_UNITS]; 00349 00353 LSG_HANDLE hTexMatrices; 00354 00358 LSG_HANDLE hFogStart; 00359 00363 LSG_HANDLE hFogEnd; 00364 00368 LSG_HANDLE hFogColor; 00369 00373 LSG_HANDLE hShadowMapping; 00374 00378 LSG_HANDLE hShadowMapUnit; 00379 00383 LSG_HANDLE hShadowMapMatrix; 00384 00388 LSG_HANDLE hShadowMapUVDepthScales; 00389 00393 LSG_HANDLE hShadowMapCasterSize; 00394 } * LPLSG_ENGINE_UNIFORMS, * const LPCLSG_ENGINE_UNIFORMS; 00395 00396 00397 // == Members. 00401 LSG_ENGINE_UNIFORMS m_euEngineHandles; 00402 00406 LSBOOL m_bBeenActivated; 00407 00408 00409 private : 00410 #ifdef LSG_OGL 00411 typedef COpenGlShader Parent; 00412 #endif // #ifdef LSG_OGL 00413 #ifdef LSG_OGLES 00414 typedef COpenGlEsShader Parent; 00415 #endif // #ifdef LSG_OGLES 00416 #ifdef LSG_DX9 00417 typedef CDirectX9Shader Parent; 00418 #endif // #ifdef LSG_DX9 00419 #ifdef LSG_DX10 00420 typedef CDirectX10Shader Parent; 00421 #endif // #ifdef LSG_DX10 00422 #ifdef LSG_DX11 00423 typedef CDirectX11Shader Parent; 00424 #endif // #ifdef LSG_DX11 00425 }; 00426 00427 00428 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00429 // DEFINITIONS 00430 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00431 // == Types. 00435 typedef CSharedPtr<CShader> CSharedShaderPtr; 00436 00437 } // namespace lsg 00438 00439 #endif // __LSG_SHADER_H__