mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
Merge pull request #1669 from Azaezel/alpha41/reflectionCorrection
make reflectors optional
This commit is contained in:
commit
23e30e801f
4 changed files with 56 additions and 23 deletions
|
|
@ -975,6 +975,7 @@ ShapeBase::ShapeBase()
|
||||||
mMoveMotion( false ),
|
mMoveMotion( false ),
|
||||||
mShapeBaseMount( NULL ),
|
mShapeBaseMount( NULL ),
|
||||||
mShapeInstance( NULL ),
|
mShapeInstance( NULL ),
|
||||||
|
mCubeReflector(NULL),
|
||||||
mConvexList( new Convex ),
|
mConvexList( new Convex ),
|
||||||
mEnergy( 0.0f ),
|
mEnergy( 0.0f ),
|
||||||
mRechargeRate( 0.0f ),
|
mRechargeRate( 0.0f ),
|
||||||
|
|
@ -1053,6 +1054,12 @@ ShapeBase::~ShapeBase()
|
||||||
mShapeInstance = NULL;
|
mShapeInstance = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mCubeReflector)
|
||||||
|
{
|
||||||
|
mCubeReflector->unregisterReflector();
|
||||||
|
SAFE_DELETE(mCubeReflector);
|
||||||
|
}
|
||||||
|
|
||||||
CollisionTimeout* ptr = mTimeoutList;
|
CollisionTimeout* ptr = mTimeoutList;
|
||||||
while (ptr) {
|
while (ptr) {
|
||||||
CollisionTimeout* cur = ptr;
|
CollisionTimeout* cur = ptr;
|
||||||
|
|
@ -1173,7 +1180,11 @@ void ShapeBase::onRemove()
|
||||||
|
|
||||||
if ( isClientObject() )
|
if ( isClientObject() )
|
||||||
{
|
{
|
||||||
mCubeReflector.unregisterReflector();
|
if (mCubeReflector)
|
||||||
|
{
|
||||||
|
mCubeReflector->unregisterReflector();
|
||||||
|
SAFE_DELETE(mCubeReflector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1349,11 +1360,17 @@ bool ShapeBase::onNewDataBlock( GameBaseData *dptr, bool reload )
|
||||||
mLightPlugin->reset();
|
mLightPlugin->reset();
|
||||||
|
|
||||||
if ( isClientObject() )
|
if ( isClientObject() )
|
||||||
{
|
{
|
||||||
mCubeReflector.unregisterReflector();
|
if (mCubeReflector)
|
||||||
|
{
|
||||||
if ( mDataBlock->reflectorDesc )
|
mCubeReflector->unregisterReflector();
|
||||||
mCubeReflector.registerReflector( this, mDataBlock->reflectorDesc );
|
SAFE_DELETE(mCubeReflector);
|
||||||
|
}
|
||||||
|
if (mDataBlock->reflectorDesc)
|
||||||
|
{
|
||||||
|
mCubeReflector = new CubeReflector();
|
||||||
|
mCubeReflector->registerReflector(this, mDataBlock->reflectorDesc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -2681,7 +2698,7 @@ void ShapeBase::_prepRenderImage( SceneRenderState *state,
|
||||||
|
|
||||||
// If we're currently rendering our own reflection we
|
// If we're currently rendering our own reflection we
|
||||||
// don't want to render ourselves into it.
|
// don't want to render ourselves into it.
|
||||||
if ( mCubeReflector.isRendering() )
|
if (mCubeReflector && mCubeReflector->isRendering())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// We force all the shapes to use the highest detail
|
// We force all the shapes to use the highest detail
|
||||||
|
|
@ -2785,8 +2802,8 @@ void ShapeBase::prepBatchRender(SceneRenderState* state, S32 mountedImageIndex )
|
||||||
// Set up our TS render state.
|
// Set up our TS render state.
|
||||||
TSRenderState rdata;
|
TSRenderState rdata;
|
||||||
rdata.setSceneState( state );
|
rdata.setSceneState( state );
|
||||||
if ( mCubeReflector.isEnabled() )
|
if (mCubeReflector && mCubeReflector->isEnabled())
|
||||||
rdata.setCubemap( mCubeReflector.getCubemap() );
|
rdata.setCubemap( mCubeReflector->getCubemap() );
|
||||||
rdata.setFadeOverride( (1.0f - mCloakLevel) * mFadeVal );
|
rdata.setFadeOverride( (1.0f - mCloakLevel) * mFadeVal );
|
||||||
|
|
||||||
// We might have some forward lit materials
|
// We might have some forward lit materials
|
||||||
|
|
@ -2810,14 +2827,14 @@ void ShapeBase::prepBatchRender(SceneRenderState* state, S32 mountedImageIndex )
|
||||||
mat.scale( mObjScale );
|
mat.scale( mObjScale );
|
||||||
GFX->setWorldMatrix( mat );
|
GFX->setWorldMatrix( mat );
|
||||||
|
|
||||||
if ( state->isDiffusePass() && mCubeReflector.isEnabled() && mCubeReflector.getOcclusionQuery() )
|
if ( state->isDiffusePass() && mCubeReflector && mCubeReflector->isEnabled() && mCubeReflector->getOcclusionQuery() )
|
||||||
{
|
{
|
||||||
RenderPassManager *pass = state->getRenderPass();
|
RenderPassManager *pass = state->getRenderPass();
|
||||||
|
|
||||||
OccluderRenderInst *ri = pass->allocInst<OccluderRenderInst>();
|
OccluderRenderInst *ri = pass->allocInst<OccluderRenderInst>();
|
||||||
|
|
||||||
ri->type = RenderPassManager::RIT_Occluder;
|
ri->type = RenderPassManager::RIT_Occluder;
|
||||||
ri->query = mCubeReflector.getOcclusionQuery();
|
ri->query = mCubeReflector->getOcclusionQuery();
|
||||||
mObjToWorld.mulP( mObjBox.getCenter(), &ri->position );
|
mObjToWorld.mulP( mObjBox.getCenter(), &ri->position );
|
||||||
ri->scale.set( mObjBox.getExtents() );
|
ri->scale.set( mObjBox.getExtents() );
|
||||||
ri->orientation = pass->allocUniqueXform( mObjToWorld );
|
ri->orientation = pass->allocUniqueXform( mObjToWorld );
|
||||||
|
|
|
||||||
|
|
@ -1207,7 +1207,7 @@ public:
|
||||||
static F32 sFullCorrectionDistance;
|
static F32 sFullCorrectionDistance;
|
||||||
static F32 sCloakSpeed; // Time to cloak, in seconds
|
static F32 sCloakSpeed; // Time to cloak, in seconds
|
||||||
|
|
||||||
CubeReflector mCubeReflector;
|
CubeReflector* mCubeReflector;
|
||||||
|
|
||||||
/// @name Initialization
|
/// @name Initialization
|
||||||
/// @{
|
/// @{
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,8 @@ F32 TSStatic::smStaticObjectUnfadeableSize = 75;
|
||||||
TSStatic::TSStatic()
|
TSStatic::TSStatic()
|
||||||
:
|
:
|
||||||
cubeDescId(0),
|
cubeDescId(0),
|
||||||
reflectorDesc(NULL)
|
reflectorDesc(NULL),
|
||||||
|
mCubeReflector(NULL)
|
||||||
{
|
{
|
||||||
mNetFlags.set(Ghostable | ScopeAlways);
|
mNetFlags.set(Ghostable | ScopeAlways);
|
||||||
|
|
||||||
|
|
@ -159,6 +160,11 @@ TSStatic::~TSStatic()
|
||||||
delete mConvexList;
|
delete mConvexList;
|
||||||
mConvexList = NULL;
|
mConvexList = NULL;
|
||||||
mShapeAsset.unregisterRefreshNotify();
|
mShapeAsset.unregisterRefreshNotify();
|
||||||
|
if (mCubeReflector)
|
||||||
|
{
|
||||||
|
mCubeReflector->unregisterReflector();
|
||||||
|
SAFE_DELETE(mCubeReflector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ImplementEnumType(TSMeshType,
|
ImplementEnumType(TSMeshType,
|
||||||
|
|
@ -361,10 +367,17 @@ bool TSStatic::onAdd()
|
||||||
|
|
||||||
if (isClientObject())
|
if (isClientObject())
|
||||||
{
|
{
|
||||||
mCubeReflector.unregisterReflector();
|
if (mCubeReflector)
|
||||||
|
{
|
||||||
|
mCubeReflector->unregisterReflector();
|
||||||
|
SAFE_DELETE(mCubeReflector);
|
||||||
|
}
|
||||||
|
|
||||||
if (reflectorDesc)
|
if (reflectorDesc)
|
||||||
mCubeReflector.registerReflector(this, reflectorDesc);
|
{
|
||||||
|
mCubeReflector = new CubeReflector();
|
||||||
|
mCubeReflector->registerReflector(this, reflectorDesc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateShouldTick();
|
_updateShouldTick();
|
||||||
|
|
@ -594,8 +607,11 @@ void TSStatic::onRemove()
|
||||||
mShapeInstance = NULL;
|
mShapeInstance = NULL;
|
||||||
|
|
||||||
mAmbientThread = NULL;
|
mAmbientThread = NULL;
|
||||||
if (isClientObject())
|
if (isClientObject() && mCubeReflector)
|
||||||
mCubeReflector.unregisterReflector();
|
{
|
||||||
|
mCubeReflector->unregisterReflector();
|
||||||
|
SAFE_DELETE(mCubeReflector);
|
||||||
|
}
|
||||||
|
|
||||||
Parent::onRemove();
|
Parent::onRemove();
|
||||||
}
|
}
|
||||||
|
|
@ -780,7 +796,7 @@ void TSStatic::prepRenderImage(SceneRenderState* state)
|
||||||
|
|
||||||
// If we're currently rendering our own reflection we
|
// If we're currently rendering our own reflection we
|
||||||
// don't want to render ourselves into it.
|
// don't want to render ourselves into it.
|
||||||
if (mCubeReflector.isRendering())
|
if (mCubeReflector && mCubeReflector->isRendering())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -800,8 +816,8 @@ void TSStatic::prepRenderImage(SceneRenderState* state)
|
||||||
rdata.setFadeOverride(1.0f);
|
rdata.setFadeOverride(1.0f);
|
||||||
rdata.setOriginSort(mUseOriginSort);
|
rdata.setOriginSort(mUseOriginSort);
|
||||||
|
|
||||||
if (mCubeReflector.isEnabled())
|
if (mCubeReflector && mCubeReflector->isEnabled())
|
||||||
rdata.setCubemap(mCubeReflector.getCubemap());
|
rdata.setCubemap(mCubeReflector->getCubemap());
|
||||||
|
|
||||||
// Acculumation
|
// Acculumation
|
||||||
rdata.setAccuTex(mAccuTex);
|
rdata.setAccuTex(mAccuTex);
|
||||||
|
|
@ -830,13 +846,13 @@ void TSStatic::prepRenderImage(SceneRenderState* state)
|
||||||
mat.scale(mObjScale);
|
mat.scale(mObjScale);
|
||||||
GFX->setWorldMatrix(mat);
|
GFX->setWorldMatrix(mat);
|
||||||
|
|
||||||
if (state->isDiffusePass() && mCubeReflector.isEnabled() && mCubeReflector.getOcclusionQuery())
|
if (state->isDiffusePass() && mCubeReflector && mCubeReflector->isEnabled() && mCubeReflector->getOcclusionQuery())
|
||||||
{
|
{
|
||||||
RenderPassManager* pass = state->getRenderPass();
|
RenderPassManager* pass = state->getRenderPass();
|
||||||
OccluderRenderInst* ri = pass->allocInst<OccluderRenderInst>();
|
OccluderRenderInst* ri = pass->allocInst<OccluderRenderInst>();
|
||||||
|
|
||||||
ri->type = RenderPassManager::RIT_Occluder;
|
ri->type = RenderPassManager::RIT_Occluder;
|
||||||
ri->query = mCubeReflector.getOcclusionQuery();
|
ri->query = mCubeReflector->getOcclusionQuery();
|
||||||
mObjToWorld.mulP(mObjBox.getCenter(), &ri->position);
|
mObjToWorld.mulP(mObjBox.getCenter(), &ri->position);
|
||||||
ri->scale.set(mObjBox.getExtents());
|
ri->scale.set(mObjBox.getExtents());
|
||||||
ri->orientation = pass->allocUniqueXform(mObjToWorld);
|
ri->orientation = pass->allocUniqueXform(mObjToWorld);
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ protected:
|
||||||
String cubeDescName;
|
String cubeDescName;
|
||||||
U32 cubeDescId;
|
U32 cubeDescId;
|
||||||
ReflectorDesc* reflectorDesc;
|
ReflectorDesc* reflectorDesc;
|
||||||
CubeReflector mCubeReflector;
|
CubeReflector* mCubeReflector;
|
||||||
|
|
||||||
void onAssetRefreshed(AssetPtrBase* pAssetPtrBase) override
|
void onAssetRefreshed(AssetPtrBase* pAssetPtrBase) override
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue