mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
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:
parent
5122360552
commit
2b57bed899
|
|
@ -46,6 +46,8 @@
|
|||
Vector< SimObjectPtr<SceneObject> > AccumulationVolume::smAccuObjects;
|
||||
Vector< SimObjectPtr<AccumulationVolume> > AccumulationVolume::smAccuVolumes;
|
||||
|
||||
GFXTexHandle gLevelAccuMap;
|
||||
|
||||
//#define DEBUG_DRAW
|
||||
|
||||
IMPLEMENT_CO_NETOBJECT_V1( AccumulationVolume );
|
||||
|
|
@ -295,7 +297,7 @@ void AccumulationVolume::refreshVolumes()
|
|||
{
|
||||
SimObjectPtr<SceneObject> object = smAccuObjects[n];
|
||||
if ( object.isValid() )
|
||||
object->mAccuTex = GFXTexHandle::ZERO;
|
||||
object->mAccuTex = gLevelAccuMap;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -336,7 +338,7 @@ void AccumulationVolume::updateObject(SceneObject* object)
|
|||
|
||||
// We use ZERO instead of NULL so the accumulation
|
||||
// texture will be updated in renderMeshMgr.
|
||||
object->mAccuTex = GFXTexHandle::ZERO;
|
||||
object->mAccuTex = gLevelAccuMap;
|
||||
|
||||
for (S32 i = 0; i < smAccuVolumes.size(); ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -36,6 +36,10 @@
|
|||
#include "sfx/sfxCommon.h"
|
||||
#endif
|
||||
|
||||
#ifndef _GFXTEXTUREHANDLE_H_
|
||||
#include "gfx/gfxTextureHandle.h"
|
||||
#endif
|
||||
|
||||
class SFXAmbience;
|
||||
class SFXSoundscape;
|
||||
|
||||
|
|
@ -96,6 +100,9 @@ class LevelInfo : public NetObject
|
|||
void _updateSceneGraph();
|
||||
|
||||
void _onLMActivate(const char *lm, bool enable);
|
||||
protected:
|
||||
// Name (path) of the accumulation texture.
|
||||
String mAccuTextureName;
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -130,9 +137,12 @@ class LevelInfo : public NetObject
|
|||
UpdateMask = BIT(0)
|
||||
};
|
||||
|
||||
GFXTexHandle mAccuTexture;
|
||||
|
||||
virtual U32 packUpdate( NetConnection *conn, U32 mask, BitStream *stream );
|
||||
virtual void unpackUpdate( NetConnection *conn, BitStream *stream );
|
||||
|
||||
static bool _setLevelAccuTexture(void *object, const char *index, const char *data);
|
||||
void setLevelAccuTexture(const String& name);
|
||||
/// @}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue