123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _SHADOWMAPPASS_H_
- #define _SHADOWMAPPASS_H_
- #ifndef _RENDERPASSMANAGER_H_
- #include "renderInstance/renderPassManager.h"
- #endif
- #ifndef _RENDERMESHMGR_H_
- #include "renderInstance/renderMeshMgr.h"
- #endif
- #ifndef _LIGHTINFO_H_
- #include "lighting/lightInfo.h"
- #endif
- #ifndef _SHADOW_COMMON_H_
- #include "lighting/shadowMap/shadowCommon.h"
- #endif
- class RenderMeshMgr;
- class LightShadowMap;
- class LightManager;
- class ShadowMapManager;
- class BaseMatInstance;
- class RenderObjectMgr;
- class RenderTerrainMgr;
- class PlatformTimer;
- class ShadowRenderPassManager;
- /// ShadowMapPass, this is plugged into the SceneManager to generate
- /// ShadowMaps for the scene.
- class ShadowMapPass
- {
- public:
- ShadowMapPass() : mTimer(NULL), mLightManager(NULL), mShadowManager(NULL), mActiveLights(0), mPrevCamFov(90.0f) {} // Only called by ConsoleSystem
- ShadowMapPass(LightManager* LightManager, ShadowMapManager* ShadowManager);
- virtual ~ShadowMapPass();
- //
- // SceneRenderPass interface
- //
- /// Called to render a scene.
- void render( SceneManager *sceneGraph,
- const SceneRenderState *diffuseState,
- U32 objectMask );
- /// Return the type of pass this is
- virtual const String& getPassType() const { return PassTypeName; };
- /// Return our sort value. (Go first in order to have shadow maps available for RIT_Objects)
- virtual F32 getSortValue() const { return 0.0f; }
- virtual bool geometryOnly() const { return true; }
- static const String PassTypeName;
- /// Used to for debugging performance by disabling
- /// shadow updates and rendering.
- static bool smDisableShadows;
- static bool smDisableShadowsEditor;
- static bool smDisableShadowsPref;
- /// distance moved per frame before forcing a shadow update
- static F32 smShadowsTeleportDist;
- /// angle turned per frame before forcing a shadow update
- static F32 smShadowsTurnRate;
- private:
- static U32 smActiveShadowMaps;
- static U32 smUpdatedShadowMaps;
- static U32 smNearShadowMaps;
- static U32 smShadowMapsDrawCalls;
- static U32 smShadowMapPolyCount;
- static U32 smRenderTargetChanges;
- static U32 smShadowPoolTexturesCount;
- static F32 smShadowPoolMemory;
- /// The milliseconds alotted for shadow map updates
- /// on a per frame basis.
- static U32 smRenderBudgetMs;
- PlatformTimer *mTimer;
- LightInfoList mLights;
- U32 mActiveLights;
- SimObjectPtr<ShadowRenderPassManager> mShadowRPM;
- LightManager* mLightManager;
- ShadowMapManager* mShadowManager;
- Point3F mPrevCamPos;
- Point3F mPrevCamRot;
- F32 mPrevCamFov;
- };
- class ShadowRenderPassManager : public RenderPassManager
- {
- typedef RenderPassManager Parent;
- public:
- ShadowRenderPassManager() : Parent() {}
- /// Add a RenderInstance to the list
- virtual void addInst( RenderInst *inst );
- };
- #endif // _SHADOWMAPPASS_H_
|