Merge pull request #858 from Azaezel/alpha401/ambientFallbackClean

provide a new levelinfo. fallbackAmbient
This commit is contained in:
Brian Roberts 2022-08-23 14:30:35 -05:00 committed by GitHub
commit 674f75dbd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 7 deletions

View file

@ -68,7 +68,7 @@ extern ColorI gCanvasClearColor;
/// @see DecalManager
extern F32 gDecalBias;
extern LinearColorF gFallbackAmbient;
/// @see AccumulationVolume
extern GFXTexHandle gLevelAccuMap;
@ -86,6 +86,7 @@ LevelInfo::LevelInfo()
mDecalBias( 0.0015f ),
mCanvasClearColor( 255, 0, 255, 255 ),
mAmbientLightBlendPhase( 1.f ),
mFallbackAmbient(LinearColorF(0.1f, 0.1f, 0.1f, 1.0f)),
mSoundAmbience( NULL ),
mSoundDistanceModel( SFXDistanceModelLinear ),
mSoundscape( NULL )
@ -163,6 +164,8 @@ void LevelInfo::initPersistFields()
addField( "ambientLightBlendCurve", TypeEaseF, Offset( mAmbientLightBlendCurve, LevelInfo ),
"Interpolation curve to use for blending from one ambient light color to a different one." );
addField("fallbackAmbient", TypeColorF, Offset(mFallbackAmbient, LevelInfo),
"Ambient Color to use if no global light source exists.");
//addField( "advancedLightmapSupport", TypeBool, Offset( mAdvancedLightmapSupport, LevelInfo ),
// "Enable expanded support for mixing static and dynamic lighting (more costly)" );
@ -211,6 +214,7 @@ U32 LevelInfo::packUpdate(NetConnection *conn, U32 mask, BitStream *stream)
stream->writeFlag( mAdvancedLightmapSupport );
stream->write( mAmbientLightBlendPhase );
mathWrite( *stream, mAmbientLightBlendCurve );
stream->write(mFallbackAmbient);
sfxWrite( stream, mSoundAmbience );
stream->writeInt( mSoundDistanceModel, 1 );
@ -241,6 +245,7 @@ void LevelInfo::unpackUpdate(NetConnection *conn, BitStream *stream)
mAdvancedLightmapSupport = stream->readFlag();
stream->read( &mAmbientLightBlendPhase );
mathRead( *stream, &mAmbientLightBlendCurve );
stream->read(&mFallbackAmbient);
String errorStr;
if( !sfxReadAndResolve( stream, &mSoundAmbience, errorStr ) )
@ -323,8 +328,8 @@ void LevelInfo::_updateSceneGraph()
scene->setVisibleGhostDistance( mVisibleGhostDistance );
gDecalBias = mDecalBias;
// Set ambient lighting properties.
gFallbackAmbient = mFallbackAmbient;
scene->setAmbientLightTransitionTime( mAmbientLightBlendPhase * 1000.f );
scene->setAmbientLightTransitionCurve( mAmbientLightBlendCurve );

View file

@ -78,7 +78,7 @@ class LevelInfo : public NetObject
/// Interpolation for going from one global ambient color
/// to a different one.
EaseF mAmbientLightBlendCurve;
LinearColorF mFallbackAmbient;
/// @}
/// @name Sound Properties

View file

@ -42,6 +42,7 @@
Signal<void(const char*,bool)> LightManager::smActivateSignal;
LightManager *LightManager::smActiveLM = NULL;
LinearColorF gFallbackAmbient;
LightManager::LightManager( const char *name, const char *id )
: mName( name ),
@ -162,19 +163,28 @@ LightInfo* LightManager::getDefaultLight()
{
// The sun is always our default light when
// when its registered.
if ( mSpecialLights[ LightManager::slSunLightType ] )
return mSpecialLights[ LightManager::slSunLightType ];
if (mSpecialLights[LightManager::slSunLightType])
{
mSpecialLights[LightManager::slSunLightType]->setAmbient(gFallbackAmbient);
return mSpecialLights[LightManager::slSunLightType];
}
// Else return a dummy special light.
if ( !mDefaultLight )
if (!mDefaultLight)
{
mDefaultLight = createLightInfo();
}
mDefaultLight->setAmbient(gFallbackAmbient);
return mDefaultLight;
}
LightInfo* LightManager::getSpecialLight( LightManager::SpecialLightTypesEnum type, bool useDefault )
{
if ( mSpecialLights[type] )
if (mSpecialLights[type])
{
mSpecialLights[LightManager::slSunLightType]->setAmbient(gFallbackAmbient);
return mSpecialLights[type];
}
if ( useDefault )
return getDefaultLight();