"L. Spiro Engine"
|
00001 00018 #ifndef __LSE_SCENEMANAGER_H__ 00019 #define __LSE_SCENEMANAGER_H__ 00020 00021 #include "../LSEEngine.h" 00022 #include "../Camera/LSECamera.h" 00023 #include "../Lights/LSEDirLight.h" 00024 #include "../Lights/LSELightBase.h" 00025 #include "../Models/LSEDrawableModelInstance.h" 00026 #include "../Models/LSEModelInstance.h" 00027 #include "RenderQueue/LSGRenderQueueSet.h" 00028 00029 namespace lse { 00030 00031 // == Enumerations. 00035 enum LSE_SCREENS { 00036 LSE_S_FULL_SCREEN, 00037 LSE_S_2P_SCREEN_UP, 00038 LSE_S_2P_SCREEN_DOWN, 00039 LSE_S_2P_SCREEN_LEFT, 00040 LSE_S_2P_SCREEN_RIGHT, 00041 LSE_S_4P_UP_LEFT, 00042 LSE_S_4P_UP_RIGHT, 00043 LSE_S_4P_BOTTOM_LEFT, 00044 LSE_S_4P_BOTTOM_RIGHT, 00046 LSE_S_TOTAL 00047 }; 00048 00057 class CSceneManager { 00058 public : 00059 // == Various constructors. 00060 LSE_CALLCTOR CSceneManager(); 00061 LSE_CALLCTOR ~CSceneManager(); 00062 00063 00064 // == Functions. 00072 CDrawableModelInstancePtr LSE_CALL CreateDrawableModelInstance( const LSCHAR * _pcFile ); 00073 00077 LSVOID LSE_CALL Reset(); 00078 00084 LSVOID LSE_CALL Render( LSE_SCREENS _sSection = LSE_S_FULL_SCREEN ); 00085 00093 LSVOID LSE_CALL Render( CSharedCameraPtr _cpCam, LSBOOL _bUpdateCamState = true ); 00094 00102 LSVOID LSE_CALL SetCamera( CSharedCameraPtr _cpCam, LSE_SCREENS _sScreen = LSE_S_FULL_SCREEN ); 00103 00110 CDirLightPtr LSE_CALL CreateDirLight(); 00111 00117 CFloatTexture & LSE_CALL GetShadowMapTexture(); 00118 00119 00120 protected : 00121 // == Members. 00125 CVector<CActorPtr, LSUINT32> m_vActors; 00126 00130 CSharedCameraPtr m_cpCams[LSE_S_TOTAL]; 00131 00135 CVector<CLightBasePtr> m_vLights; 00136 00140 CDrawableModelInstance::CDrawableMeshInstanceArray 00141 m_miaMainMeshList; 00142 00146 CRenderQueueSet m_rqsMainRenderQueueSet; 00147 00151 CVector3 m_vFrustumCorners[8]; 00152 00156 CVector<CDrawableModelInstance::CDrawableMeshInstanceArray, LSUINT32> 00157 m_vLightMeshInstances; 00158 00162 CVector<CRenderQueueSet, LSUINT32> m_vLightRenderQueues; 00163 00167 CVectorPoD<CVector3, LSUINT32> m_vLightUvDepthFactors; 00168 00172 CFloatTexture m_ftShadowMapTex; 00173 00177 LSBOOL m_bShadows; 00178 00182 CVector3 m_vCamDir; 00183 00187 CVector3 m_vCamPos; 00188 00192 CFrustum m_fFrustum; 00193 00197 CMatrix4x4 m_mProj; 00198 00202 CMatrix4x4 m_mView; 00203 00207 CMatrix4x4 m_mInvView; 00208 00212 static CMatrix4x4 m_mBias; 00213 00214 00215 00216 // == Functions. 00222 LSVOID LSE_CALL RenderDirLightShadowMapOpaque( LSUINT32 _ui32Index ); 00223 00229 LSVOID LSE_CALL CreateDirLightShadowMapMatrix( LSUINT32 _ui32Index ); 00230 00236 LSVOID LSE_CALL RenderAmbientPassOpaque( CRenderQueue &_rqSet ); 00237 00243 LSVOID LSE_CALL RenderAmbientPassTrans( CRenderQueue &_rqSet ); 00244 00250 LSVOID LSE_CALL RenderOpaque( CRenderQueue &_rqSet ); 00251 00257 LSVOID LSE_CALL RenderTrans( CRenderQueue &_rqSet ); 00258 00264 LSBOOL LSE_CALL CreateMainShadowMapTexture(); 00265 00266 }; 00267 00268 00269 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00270 // DEFINITIONS 00271 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00272 // == Types. 00276 typedef CSharedPtr<CSceneManager> CSceneManagerPtr; 00277 00278 } // namespace lse 00279 00280 #endif // __LSE_SCENEMANAGER_H__