level-wide accumulation assignment - overidden if an object's origin is in an accumulationVolume.

** do note changing the value does require nudging a mesh and/or a level reload to kick in at time of writing for visual feedback.
This commit is contained in:
Azaezel 2016-06-09 12:51:43 -05:00
parent 5122360552
commit 2b57bed899
3 changed files with 47 additions and 4 deletions

View file

@ -69,6 +69,8 @@ extern ColorI gCanvasClearColor;
/// @see DecalManager
extern F32 gDecalBias;
/// @see AccumulationVolume
extern GFXTexHandle gLevelAccuMap;
/// Default SFXAmbience used to reset the global soundscape.
static SFXAmbience sDefaultAmbience;
@ -96,6 +98,8 @@ LevelInfo::LevelInfo()
mNetFlags.set( ScopeAlways | Ghostable );
mAdvancedLightmapSupport = false;
mAccuTextureName = "";
mAccuTexture = NULL;
// Register with the light manager activation signal, and we need to do it first
// so the advanced light bin manager can be instructed about MRT lightmaps
@ -157,6 +161,9 @@ void LevelInfo::initPersistFields()
addField( "advancedLightmapSupport", TypeBool, Offset( mAdvancedLightmapSupport, LevelInfo ),
"Enable expanded support for mixing static and dynamic lighting (more costly)" );
addProtectedField("AccuTexture", TypeStringFilename, Offset(mAccuTextureName, LevelInfo),
&_setLevelAccuTexture, &defaultProtectedGetFn, "Accumulation texture.");
endGroup( "Lighting" );
addGroup( "Sound" );
@ -203,7 +210,8 @@ U32 LevelInfo::packUpdate(NetConnection *conn, U32 mask, BitStream *stream)
sfxWrite( stream, mSoundAmbience );
stream->writeInt( mSoundDistanceModel, 1 );
stream->write(mAccuTextureName);
return retMask;
}
@ -248,6 +256,8 @@ void LevelInfo::unpackUpdate(NetConnection *conn, BitStream *stream)
SFX->setDistanceModel( mSoundDistanceModel );
}
stream->read(&mAccuTextureName);
setLevelAccuTexture(mAccuTextureName);
}
//-----------------------------------------------------------------------------
@ -341,4 +351,25 @@ void LevelInfo::_onLMActivate(const char *lm, bool enable)
lightMgr->getLightBinManager()->MRTLightmapsDuringPrePass(mAdvancedLightmapSupport);
}
#endif
}
bool LevelInfo::_setLevelAccuTexture(void *object, const char *index, const char *data)
{
LevelInfo* volume = reinterpret_cast< LevelInfo* >(object);
volume->setLevelAccuTexture(data);
return false;
}
void LevelInfo::setLevelAccuTexture(const String& name)
{
mAccuTextureName = name;
if (isClientObject() && mAccuTextureName.isNotEmpty())
{
mAccuTexture.set(mAccuTextureName, &GFXDefaultStaticDiffuseProfile, "AccumulationVolume::mAccuTexture");
if (mAccuTexture.isNull())
Con::warnf("AccumulationVolume::setTexture - Unable to load texture: %s", mAccuTextureName.c_str());
else
gLevelAccuMap = mAccuTexture;
}
}