void ShadowMapManager::setLightShadowMapForLight( LightInfo *light ) { ShadowMapParams *params = light->getExtended<ShadowMapParams>(); if ( params ) mCurrentShadowMap = params->getShadowMap(); else mCurrentShadowMap = NULL; }
void AdvancedLightBinManager::addLight( LightInfo *light ) { // Get the light type. const LightInfo::Type lightType = light->getType(); AssertFatal( lightType == LightInfo::Point || lightType == LightInfo::Spot, "Bogus light type." ); // Find a shadow map for this light, if it has one ShadowMapParams *lsp = light->getExtended<ShadowMapParams>(); LightShadowMap *lsm = lsp->getShadowMap(); // Get the right shadow type. ShadowType shadowType = ShadowType_None; if ( light->getCastShadows() && lsm && lsm->hasShadowTex() && !ShadowMapPass::smDisableShadows ) shadowType = lsm->getShadowType(); // Add the entry LightBinEntry lEntry; lEntry.lightInfo = light; lEntry.shadowMap = lsm; lEntry.lightMaterial = _getLightMaterial( lightType, shadowType, lsp->hasCookieTex() ); if( lightType == LightInfo::Spot ) lEntry.vertBuffer = mLightManager->getConeMesh( lEntry.numPrims, lEntry.primBuffer ); else lEntry.vertBuffer = mLightManager->getSphereMesh( lEntry.numPrims, lEntry.primBuffer ); // If it's a point light, push front, spot // light, push back. This helps batches. Vector<LightBinEntry> &curBin = mLightBin; if ( light->getType() == LightInfo::Point ) curBin.push_front( lEntry ); else curBin.push_back( lEntry ); }