mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-12 19:31:41 +00:00
Removes current implement of shadow caching
Also removes EC stuff as it's not ready for prime-time yet
This commit is contained in:
parent
f007700646
commit
66cc6fb9d1
141 changed files with 67 additions and 19491 deletions
|
|
@ -85,27 +85,21 @@ LightShadowMap::LightShadowMap( LightInfo *light )
|
|||
: mWorldToLightProj( true ),
|
||||
mTexSize( 0 ),
|
||||
mLight( light ),
|
||||
mLastUpdate( 0 ),
|
||||
mLastShader( NULL ),
|
||||
mIsViewDependent( false ),
|
||||
mLastCull( 0 ),
|
||||
mLastScreenSize( 0.0f ),
|
||||
mLastPriority( 0.0f ),
|
||||
mIsDynamic( false )
|
||||
mLastPriority( 0.0f )
|
||||
{
|
||||
GFXTextureManager::addEventDelegate( this, &LightShadowMap::_onTextureEvent );
|
||||
|
||||
mTarget = GFX->allocRenderToTextureTarget();
|
||||
smShadowMaps.push_back( this );
|
||||
mStaticRefreshTimer = PlatformTimer::create();
|
||||
mDynamicRefreshTimer = PlatformTimer::create();
|
||||
}
|
||||
|
||||
LightShadowMap::~LightShadowMap()
|
||||
{
|
||||
mTarget = NULL;
|
||||
SAFE_DELETE(mStaticRefreshTimer);
|
||||
SAFE_DELETE(mDynamicRefreshTimer);
|
||||
|
||||
releaseTextures();
|
||||
|
||||
|
|
@ -246,7 +240,6 @@ void LightShadowMap::releaseTextures()
|
|||
{
|
||||
mShadowMapTex = NULL;
|
||||
mDebugTarget.setTexture( NULL );
|
||||
mLastUpdate = 0;
|
||||
smUsedShadowMaps.remove( this );
|
||||
}
|
||||
|
||||
|
|
@ -268,7 +261,7 @@ GFXTextureObject* LightShadowMap::_getDepthTarget( U32 width, U32 height )
|
|||
|
||||
bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants* lsc )
|
||||
{
|
||||
if ( currTexFlag == Material::DynamicLight && !isDynamic() )
|
||||
if ( currTexFlag == Material::DynamicLight )
|
||||
{
|
||||
S32 reg = lsc->mShadowMapSC->getSamplerRegister();
|
||||
|
||||
|
|
@ -276,16 +269,7 @@ bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants*
|
|||
GFX->setTexture( reg, mShadowMapTex);
|
||||
|
||||
return true;
|
||||
} else if ( currTexFlag == Material::DynamicShadowMap && isDynamic() )
|
||||
{
|
||||
S32 reg = lsc->mDynamicShadowMapSC->getSamplerRegister();
|
||||
|
||||
if ( reg != -1 )
|
||||
GFX->setTexture( reg, mShadowMapTex);
|
||||
|
||||
return true;
|
||||
}
|
||||
else if ( currTexFlag == Material::DynamicLightMask )
|
||||
} else if ( currTexFlag == Material::DynamicLightMask )
|
||||
{
|
||||
S32 reg = lsc->mCookieMapSC->getSamplerRegister();
|
||||
if ( reg != -1 )
|
||||
|
|
@ -304,35 +288,16 @@ bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants*
|
|||
return false;
|
||||
}
|
||||
|
||||
void LightShadowMap::render(RenderPassManager* renderPass,
|
||||
const SceneRenderState *diffuseState,
|
||||
bool _dynamic, bool _forceUpdate)
|
||||
void LightShadowMap::render(RenderPassManager* renderPass, const SceneRenderState *diffuseState)
|
||||
{
|
||||
if (!_forceUpdate)
|
||||
{
|
||||
// control how often shadow maps are refreshed
|
||||
if (!_dynamic && (mStaticRefreshTimer->getElapsedMs() < getLightInfo()->getStaticRefreshFreq()))
|
||||
return;
|
||||
}
|
||||
mStaticRefreshTimer->reset();
|
||||
|
||||
|
||||
if (_dynamic && (mDynamicRefreshTimer->getElapsedMs() < getLightInfo()->getDynamicRefreshFreq()))
|
||||
return;
|
||||
mDynamicRefreshTimer->reset();
|
||||
|
||||
mDebugTarget.setTexture( NULL );
|
||||
_render( renderPass, diffuseState );
|
||||
mDebugTarget.setTexture( mShadowMapTex );
|
||||
|
||||
// Add it to the used list unless we're been updated.
|
||||
if ( !mLastUpdate )
|
||||
{
|
||||
AssertFatal( !smUsedShadowMaps.contains( this ), "LightShadowMap::render - Used shadow map inserted twice!" );
|
||||
//AssertFatal( !smUsedShadowMaps.contains( this ), "LightShadowMap::render - Used shadow map inserted twice!" );
|
||||
if(!smUsedShadowMaps.contains(this))
|
||||
smUsedShadowMaps.push_back( this );
|
||||
}
|
||||
|
||||
mLastUpdate = Sim::getCurrentTime();
|
||||
}
|
||||
|
||||
BaseMatInstance* LightShadowMap::getShadowMaterial( BaseMatInstance *inMat ) const
|
||||
|
|
@ -395,8 +360,6 @@ void LightShadowMap::updatePriority( const SceneRenderState *state, U32 currTime
|
|||
return;
|
||||
}
|
||||
|
||||
U32 timeSinceLastUpdate = currTimeMs - mLastUpdate;
|
||||
|
||||
const Point3F &camPt = state->getCameraPosition();
|
||||
F32 range = mLight->getRange().x;
|
||||
F32 dist;
|
||||
|
|
@ -422,7 +385,6 @@ void LightShadowMap::updatePriority( const SceneRenderState *state, U32 currTime
|
|||
|
||||
// Update the priority.
|
||||
mLastPriority = mPow( mLastScreenSize * 50.0f, 2.0f );
|
||||
mLastPriority += timeSinceLastUpdate;
|
||||
mLastPriority *= mLight->getPriority();
|
||||
}
|
||||
|
||||
|
|
@ -466,7 +428,6 @@ LightingShaderConstants::LightingShaderConstants()
|
|||
mVectorLightColorSC(NULL),
|
||||
mVectorLightBrightnessSC(NULL),
|
||||
mShadowMapSC(NULL),
|
||||
mDynamicShadowMapSC(NULL),
|
||||
mShadowMapSizeSC(NULL),
|
||||
mCookieMapSC(NULL),
|
||||
mRandomDirsConst(NULL),
|
||||
|
|
@ -484,15 +445,7 @@ LightingShaderConstants::LightingShaderConstants()
|
|||
mScaleYSC(NULL),
|
||||
mOffsetXSC(NULL),
|
||||
mOffsetYSC(NULL),
|
||||
mFarPlaneScalePSSM(NULL),
|
||||
|
||||
mDynamicWorldToLightProjSC(NULL),
|
||||
mDynamicViewToLightProjSC(NULL),
|
||||
mDynamicScaleXSC(NULL),
|
||||
mDynamicScaleYSC(NULL),
|
||||
mDynamicOffsetXSC(NULL),
|
||||
mDynamicOffsetYSC(NULL),
|
||||
mDynamicFarPlaneScalePSSM(NULL)
|
||||
mFarPlaneScalePSSM(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -534,7 +487,6 @@ void LightingShaderConstants::init(GFXShader* shader)
|
|||
mVectorLightBrightnessSC = shader->getShaderConstHandle(ShaderGenVars::vectorLightBrightness);
|
||||
|
||||
mShadowMapSC = shader->getShaderConstHandle("$shadowMap");
|
||||
mDynamicShadowMapSC = shader->getShaderConstHandle("$dynamicShadowMap");
|
||||
mShadowMapSizeSC = shader->getShaderConstHandle("$shadowMapSize");
|
||||
|
||||
mCookieMapSC = shader->getShaderConstHandle("$cookieMap");
|
||||
|
|
@ -556,14 +508,6 @@ void LightingShaderConstants::init(GFXShader* shader)
|
|||
mOffsetYSC = shader->getShaderConstHandle("$offsetY");
|
||||
mFarPlaneScalePSSM = shader->getShaderConstHandle("$farPlaneScalePSSM");
|
||||
|
||||
mDynamicWorldToLightProjSC = shader->getShaderConstHandle("$dynamicWorldToLightProj");
|
||||
mDynamicViewToLightProjSC = shader->getShaderConstHandle("$dynamicViewToLightProj");
|
||||
mDynamicScaleXSC = shader->getShaderConstHandle("$dynamicScaleX");
|
||||
mDynamicScaleYSC = shader->getShaderConstHandle("$dynamicScaleY");
|
||||
mDynamicOffsetXSC = shader->getShaderConstHandle("$dynamicOffsetX");
|
||||
mDynamicOffsetYSC = shader->getShaderConstHandle("$dynamicOffsetY");
|
||||
mDynamicFarPlaneScalePSSM = shader->getShaderConstHandle("$dynamicFarPlaneScalePSSM");
|
||||
|
||||
mInit = true;
|
||||
}
|
||||
|
||||
|
|
@ -585,9 +529,7 @@ LightInfoExType ShadowMapParams::Type( "" );
|
|||
|
||||
ShadowMapParams::ShadowMapParams( LightInfo *light )
|
||||
: mShadowMap( NULL ),
|
||||
mLight( light ),
|
||||
mDynamicShadowMap ( NULL ),
|
||||
isDynamic ( true )
|
||||
mLight( light )
|
||||
{
|
||||
attenuationRatio.set( 0.0f, 1.0f, 1.0f );
|
||||
shadowType = ShadowType_Spot;
|
||||
|
|
@ -608,7 +550,6 @@ ShadowMapParams::~ShadowMapParams()
|
|||
{
|
||||
SAFE_DELETE( mQuery );
|
||||
SAFE_DELETE( mShadowMap );
|
||||
SAFE_DELETE( mDynamicShadowMap );
|
||||
}
|
||||
|
||||
void ShadowMapParams::_validate()
|
||||
|
|
@ -665,12 +606,9 @@ void ShadowMapParams::_validate()
|
|||
texSize = mClamp( texSize, 32, maxTexSize );
|
||||
}
|
||||
|
||||
LightShadowMap* ShadowMapParams::getOrCreateShadowMap(bool _isDynamic)
|
||||
LightShadowMap* ShadowMapParams::getOrCreateShadowMap()
|
||||
{
|
||||
if (_isDynamic && mDynamicShadowMap)
|
||||
return mDynamicShadowMap;
|
||||
|
||||
if (!_isDynamic && mShadowMap)
|
||||
if (mShadowMap)
|
||||
return mShadowMap;
|
||||
|
||||
if ( !mLight->getCastShadows() )
|
||||
|
|
@ -702,18 +640,8 @@ LightShadowMap* ShadowMapParams::getOrCreateShadowMap(bool _isDynamic)
|
|||
break;
|
||||
}
|
||||
|
||||
if ( _isDynamic )
|
||||
{
|
||||
newShadowMap->setDynamic( true );
|
||||
mDynamicShadowMap = newShadowMap;
|
||||
return mDynamicShadowMap;
|
||||
}
|
||||
else
|
||||
{
|
||||
newShadowMap->setDynamic(false);
|
||||
mShadowMap = newShadowMap;
|
||||
return mShadowMap;
|
||||
}
|
||||
mShadowMap = newShadowMap;
|
||||
return mShadowMap;
|
||||
}
|
||||
|
||||
GFXTextureObject* ShadowMapParams::getCookieTex()
|
||||
|
|
@ -788,7 +716,6 @@ void ShadowMapParams::unpackUpdate( BitStream *stream )
|
|||
// map so it can be reallocated on the next render.
|
||||
shadowType = newType;
|
||||
SAFE_DELETE( mShadowMap );
|
||||
SAFE_DELETE( mDynamicShadowMap );
|
||||
}
|
||||
|
||||
mathRead( *stream, &attenuationRatio );
|
||||
|
|
|
|||
|
|
@ -96,7 +96,6 @@ struct LightingShaderConstants
|
|||
GFXShaderConstHandle* mVectorLightBrightnessSC;
|
||||
|
||||
GFXShaderConstHandle* mShadowMapSC;
|
||||
GFXShaderConstHandle* mDynamicShadowMapSC;
|
||||
GFXShaderConstHandle* mShadowMapSizeSC;
|
||||
|
||||
GFXShaderConstHandle* mCookieMapSC;
|
||||
|
|
@ -123,15 +122,6 @@ struct LightingShaderConstants
|
|||
GFXShaderConstHandle* mOffsetYSC;
|
||||
GFXShaderConstHandle* mFarPlaneScalePSSM;
|
||||
|
||||
// Dynamic Specific:
|
||||
GFXShaderConstHandle* mDynamicWorldToLightProjSC;
|
||||
GFXShaderConstHandle* mDynamicViewToLightProjSC;
|
||||
GFXShaderConstHandle* mDynamicScaleXSC;
|
||||
GFXShaderConstHandle* mDynamicScaleYSC;
|
||||
GFXShaderConstHandle* mDynamicOffsetXSC;
|
||||
GFXShaderConstHandle* mDynamicOffsetYSC;
|
||||
GFXShaderConstHandle* mDynamicFarPlaneScalePSSM;
|
||||
|
||||
LightingShaderConstants();
|
||||
~LightingShaderConstants();
|
||||
|
||||
|
|
@ -165,10 +155,7 @@ public:
|
|||
virtual ~LightShadowMap();
|
||||
|
||||
void render( RenderPassManager* renderPass,
|
||||
const SceneRenderState *diffuseState,
|
||||
bool _dynamic, bool _forceUpdate);
|
||||
|
||||
U32 getLastUpdate() const { return mLastUpdate; }
|
||||
const SceneRenderState *diffuseState);
|
||||
|
||||
//U32 getLastVisible() const { return mLastVisible; }
|
||||
|
||||
|
|
@ -248,11 +235,6 @@ protected:
|
|||
/// be skipped if visible and within active range.
|
||||
bool mIsViewDependent;
|
||||
|
||||
/// The time this shadow was last updated.
|
||||
U32 mLastUpdate;
|
||||
PlatformTimer *mStaticRefreshTimer;
|
||||
PlatformTimer *mDynamicRefreshTimer;
|
||||
|
||||
/// The time this shadow was last culled and prioritized.
|
||||
U32 mLastCull;
|
||||
|
||||
|
|
@ -280,13 +262,6 @@ protected:
|
|||
/// The callback used to get texture events.
|
||||
/// @see GFXTextureManager::addEventDelegate
|
||||
void _onTextureEvent( GFXTexCallbackCode code );
|
||||
|
||||
bool mIsDynamic;
|
||||
public:
|
||||
|
||||
bool isDynamic() { return mIsDynamic; }
|
||||
void setDynamic(bool value) { mIsDynamic = value; }
|
||||
|
||||
};
|
||||
|
||||
GFX_DeclareTextureProfile( ShadowMapProfile );
|
||||
|
|
@ -309,9 +284,9 @@ public:
|
|||
virtual void packUpdate( BitStream *stream ) const;
|
||||
virtual void unpackUpdate( BitStream *stream );
|
||||
|
||||
LightShadowMap* getShadowMap(bool _isDynamic = false) const { return _isDynamic ? mDynamicShadowMap : mShadowMap; }
|
||||
LightShadowMap* getShadowMap() const { return mShadowMap; }
|
||||
|
||||
LightShadowMap* getOrCreateShadowMap(bool _isDynamic = false);
|
||||
LightShadowMap* getOrCreateShadowMap();
|
||||
|
||||
bool hasCookieTex() const { return cookie.isNotEmpty(); }
|
||||
|
||||
|
|
@ -330,7 +305,6 @@ protected:
|
|||
|
||||
///
|
||||
LightShadowMap *mShadowMap;
|
||||
LightShadowMap *mDynamicShadowMap;
|
||||
GFXOcclusionQuery* mQuery;
|
||||
|
||||
LightInfo *mLight;
|
||||
|
|
@ -393,7 +367,6 @@ public:
|
|||
bool lastSplitTerrainOnly;
|
||||
|
||||
/// @}
|
||||
bool isDynamic;
|
||||
};
|
||||
|
||||
#endif // _LIGHTSHADOWMAP_H_
|
||||
|
|
|
|||
|
|
@ -445,20 +445,11 @@ void PSSMLightShadowMap::setShaderParameters(GFXShaderConstBuffer* params, Light
|
|||
}
|
||||
|
||||
// These values change based on static/dynamic.
|
||||
if ( mIsDynamic )
|
||||
{
|
||||
params->setSafe(lsc->mDynamicScaleXSC, sx);
|
||||
params->setSafe(lsc->mDynamicScaleYSC, sy);
|
||||
params->setSafe(lsc->mDynamicOffsetXSC, ox);
|
||||
params->setSafe(lsc->mDynamicOffsetYSC, oy);
|
||||
params->setSafe( lsc->mDynamicFarPlaneScalePSSM, mFarPlaneScalePSSM);
|
||||
} else {
|
||||
params->setSafe(lsc->mScaleXSC, sx);
|
||||
params->setSafe(lsc->mScaleYSC, sy);
|
||||
params->setSafe(lsc->mOffsetXSC, ox);
|
||||
params->setSafe(lsc->mOffsetYSC, oy);
|
||||
params->setSafe( lsc->mFarPlaneScalePSSM, mFarPlaneScalePSSM);
|
||||
}
|
||||
params->setSafe(lsc->mScaleXSC, sx);
|
||||
params->setSafe(lsc->mScaleYSC, sy);
|
||||
params->setSafe(lsc->mOffsetXSC, ox);
|
||||
params->setSafe(lsc->mOffsetYSC, oy);
|
||||
params->setSafe(lsc->mFarPlaneScalePSSM, mFarPlaneScalePSSM);
|
||||
|
||||
params->setSafe(lsc->mAtlasXOffsetSC, aXOff);
|
||||
params->setSafe(lsc->mAtlasYOffsetSC, aYOff);
|
||||
|
|
|
|||
|
|
@ -99,7 +99,6 @@ Signal<void(void)> ShadowMapManager::smShadowDeactivateSignal;
|
|||
ShadowMapManager::ShadowMapManager()
|
||||
: mShadowMapPass(NULL),
|
||||
mCurrentShadowMap(NULL),
|
||||
mCurrentDynamicShadowMap(NULL),
|
||||
mIsActive(false)
|
||||
{
|
||||
}
|
||||
|
|
@ -114,12 +113,10 @@ void ShadowMapManager::setLightShadowMapForLight( LightInfo *light )
|
|||
if ( params )
|
||||
{
|
||||
mCurrentShadowMap = params->getShadowMap();
|
||||
mCurrentDynamicShadowMap = params->getShadowMap(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
mCurrentShadowMap = NULL;
|
||||
mCurrentDynamicShadowMap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,14 +60,12 @@ public:
|
|||
|
||||
/// Sets the current shadowmap (used in setLightInfo/setTextureStage calls)
|
||||
void setLightShadowMap( LightShadowMap *lm ) { mCurrentShadowMap = lm; }
|
||||
void setLightDynamicShadowMap( LightShadowMap *lm ) { mCurrentDynamicShadowMap = lm; }
|
||||
|
||||
/// Looks up the shadow map for the light then sets it.
|
||||
void setLightShadowMapForLight( LightInfo *light );
|
||||
|
||||
/// Return the current shadow map
|
||||
LightShadowMap* getCurrentShadowMap() const { return mCurrentShadowMap; }
|
||||
LightShadowMap* getCurrentDynamicShadowMap() const { return mCurrentDynamicShadowMap; }
|
||||
|
||||
ShadowMapPass* getShadowMapPass() const { return mShadowMapPass; }
|
||||
|
||||
|
|
@ -90,7 +88,6 @@ protected:
|
|||
|
||||
ShadowMapPass *mShadowMapPass;
|
||||
LightShadowMap *mCurrentShadowMap;
|
||||
LightShadowMap *mCurrentDynamicShadowMap;
|
||||
|
||||
///
|
||||
GFXTexHandle mTapRotationTex;
|
||||
|
|
@ -108,4 +105,4 @@ public:
|
|||
|
||||
GFX_DeclareTextureProfile( ShadowMapTexProfile );
|
||||
|
||||
#endif // _SHADOWMAPMANAGER_H_
|
||||
#endif // _SHADOWMAPMANAGER_H_
|
||||
|
|
|
|||
|
|
@ -79,15 +79,6 @@ ShadowMapPass::ShadowMapPass(LightManager* lightManager, ShadowMapManager* shado
|
|||
mShadowRPM->addManager( new RenderTerrainMgr( 0.5f, 0.5f ) );
|
||||
mShadowRPM->addManager( new RenderImposterMgr( 0.6f, 0.6f ) );
|
||||
|
||||
// Dynamic
|
||||
mDynamicShadowRPM = new DynamicShadowRenderPassManager();
|
||||
mDynamicShadowRPM->assignName( "DynamicShadowRenderPassManager" );
|
||||
mDynamicShadowRPM->registerObject();
|
||||
Sim::getRootGroup()->addObject( mDynamicShadowRPM );
|
||||
mDynamicShadowRPM->addManager( new RenderMeshMgr(RenderPassManager::RIT_Mesh, 0.3f, 0.3f) );
|
||||
mDynamicShadowRPM->addManager( new RenderTerrainMgr( 0.5f, 0.5f ) );
|
||||
mDynamicShadowRPM->addManager( new RenderImposterMgr( 0.6f, 0.6f ) );
|
||||
|
||||
mActiveLights = 0;
|
||||
mPrevCamPos = Point3F::Zero;
|
||||
mPrevCamRot = Point3F::Zero;
|
||||
|
|
@ -132,9 +123,6 @@ ShadowMapPass::~ShadowMapPass()
|
|||
|
||||
if ( mShadowRPM )
|
||||
mShadowRPM->deleteObject();
|
||||
|
||||
if ( mDynamicShadowRPM )
|
||||
mDynamicShadowRPM->deleteObject();
|
||||
}
|
||||
|
||||
void ShadowMapPass::render( SceneManager *sceneManager,
|
||||
|
|
@ -165,7 +153,7 @@ void ShadowMapPass::render( SceneManager *sceneManager,
|
|||
// First do a loop thru the lights setting up the shadow
|
||||
// info array for this pass.
|
||||
Vector<LightShadowMap*> shadowMaps;
|
||||
shadowMaps.reserve( mActiveLights * 2 );
|
||||
shadowMaps.reserve( mActiveLights );
|
||||
for ( U32 i = 0; i < mActiveLights; i++ )
|
||||
{
|
||||
ShadowMapParams *params = mLights[i]->getExtended<ShadowMapParams>();
|
||||
|
|
@ -176,7 +164,6 @@ void ShadowMapPass::render( SceneManager *sceneManager,
|
|||
|
||||
// --- Static Shadow Map ---
|
||||
LightShadowMap *lsm = params->getOrCreateShadowMap();
|
||||
LightShadowMap *dlsm = params->getOrCreateShadowMap(true);
|
||||
|
||||
// First check the visiblity query... if it wasn't
|
||||
// visible skip it.
|
||||
|
|
@ -191,17 +178,6 @@ void ShadowMapPass::render( SceneManager *sceneManager,
|
|||
lsm->updatePriority(diffuseState, currTime);
|
||||
|
||||
shadowMaps.push_back(lsm);
|
||||
|
||||
// --- Dynamic Shadow Map ---
|
||||
|
||||
// Any shadow that is visible is counted as being
|
||||
// active regardless if we update it or not.
|
||||
++smActiveShadowMaps;
|
||||
|
||||
// Do a priority update for this shadow.
|
||||
dlsm->updatePriority(diffuseState, currTime);
|
||||
|
||||
shadowMaps.push_back( dlsm );
|
||||
}
|
||||
|
||||
// Now sort the shadow info by priority.
|
||||
|
|
@ -238,32 +214,19 @@ void ShadowMapPass::render( SceneManager *sceneManager,
|
|||
mPrevCamFov = control->getCameraFov();
|
||||
|
||||
// 2 Shadow Maps per Light. This may fail.
|
||||
for ( U32 i = 0; i < shadowMaps.size(); i += 2 )
|
||||
for ( U32 i = 0; i < shadowMaps.size(); i++ )
|
||||
{
|
||||
LightShadowMap *lsm = shadowMaps[i];
|
||||
LightShadowMap *dlsm = shadowMaps[i + 1];
|
||||
|
||||
{
|
||||
GFXDEBUGEVENT_SCOPE( ShadowMapPass_Render_Shadow, ColorI::RED );
|
||||
|
||||
mShadowManager->setLightShadowMap(lsm);
|
||||
mShadowManager->setLightDynamicShadowMap( dlsm );
|
||||
mShadowManager->setLightShadowMap(lsm);
|
||||
|
||||
lsm->render(mShadowRPM, diffuseState, false, forceUpdate);
|
||||
dlsm->render(mDynamicShadowRPM, diffuseState, true, forceUpdate);
|
||||
lsm->render(mShadowRPM, diffuseState);
|
||||
|
||||
++smUpdatedShadowMaps;
|
||||
}
|
||||
|
||||
// View dependent shadows or ones that are covering the entire
|
||||
// screen are updated every frame no matter the time left in
|
||||
// our shadow rendering budget.
|
||||
if ( dlsm->isViewDependent() || dlsm->getLastScreenSize() >= 1.0f )
|
||||
{
|
||||
++smNearShadowMaps;
|
||||
continue;
|
||||
}
|
||||
|
||||
// See if we're over our frame budget for shadow
|
||||
// updates... give up completely in that case.
|
||||
if ( mTimer->getElapsedMs() > smRenderBudgetMs )
|
||||
|
|
@ -284,7 +247,6 @@ void ShadowMapPass::render( SceneManager *sceneManager,
|
|||
// The NULL here is importaint as having it around
|
||||
// will cause extra work in AdvancedLightManager::setLightInfo().
|
||||
mShadowManager->setLightShadowMap( NULL );
|
||||
mShadowManager->setLightDynamicShadowMap( NULL );
|
||||
}
|
||||
|
||||
void ShadowRenderPassManager::addInst( RenderInst *inst )
|
||||
|
|
@ -298,29 +260,7 @@ void ShadowRenderPassManager::addInst( RenderInst *inst )
|
|||
return;
|
||||
|
||||
const BaseMaterialDefinition *mat = meshRI->matInst->getMaterial();
|
||||
if ( !mat->castsShadows() || mat->castsDynamicShadows() || mat->isTranslucent() )
|
||||
{
|
||||
// Do not add this instance, return here and avoid the default behavior
|
||||
// of calling up to Parent::addInst()
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Parent::addInst(inst);
|
||||
}
|
||||
|
||||
void DynamicShadowRenderPassManager::addInst( RenderInst *inst )
|
||||
{
|
||||
PROFILE_SCOPE(DynamicShadowRenderPassManager_addInst);
|
||||
|
||||
if ( inst->type == RIT_Mesh )
|
||||
{
|
||||
MeshRenderInst *meshRI = static_cast<MeshRenderInst*>( inst );
|
||||
if ( !meshRI->matInst )
|
||||
return;
|
||||
|
||||
const BaseMaterialDefinition *mat = meshRI->matInst->getMaterial();
|
||||
if ( !mat->castsShadows() || !mat->castsDynamicShadows() || mat->isTranslucent() )
|
||||
if ( !mat->castsShadows() || mat->isTranslucent() )
|
||||
{
|
||||
// Do not add this instance, return here and avoid the default behavior
|
||||
// of calling up to Parent::addInst()
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ class RenderObjectMgr;
|
|||
class RenderTerrainMgr;
|
||||
class PlatformTimer;
|
||||
class ShadowRenderPassManager;
|
||||
class DynamicShadowRenderPassManager;
|
||||
|
||||
/// ShadowMapPass, this is plugged into the SceneManager to generate
|
||||
/// ShadowMaps for the scene.
|
||||
|
|
@ -109,7 +108,6 @@ private:
|
|||
LightInfoList mLights;
|
||||
U32 mActiveLights;
|
||||
SimObjectPtr<ShadowRenderPassManager> mShadowRPM;
|
||||
SimObjectPtr<DynamicShadowRenderPassManager> mDynamicShadowRPM;
|
||||
LightManager* mLightManager;
|
||||
ShadowMapManager* mShadowManager;
|
||||
Point3F mPrevCamPos;
|
||||
|
|
@ -127,14 +125,4 @@ public:
|
|||
virtual void addInst( RenderInst *inst );
|
||||
};
|
||||
|
||||
class DynamicShadowRenderPassManager : public RenderPassManager
|
||||
{
|
||||
typedef RenderPassManager Parent;
|
||||
public:
|
||||
DynamicShadowRenderPassManager() : Parent() {}
|
||||
|
||||
/// Add a RenderInstance to the list
|
||||
virtual void addInst(RenderInst *inst);
|
||||
};
|
||||
|
||||
#endif // _SHADOWMAPPASS_H_
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue