mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Merge pull request #1928 from lukaspj/particle-manager-lmactivate-cleanup
Cleanup when deactivating light manager instead of reinitializing
This commit is contained in:
commit
ac19e0e84c
|
|
@ -589,43 +589,51 @@ bool RenderParticleMgr::_initShader()
|
||||||
|
|
||||||
void RenderParticleMgr::_onLMActivate( const char*, bool activate )
|
void RenderParticleMgr::_onLMActivate( const char*, bool activate )
|
||||||
{
|
{
|
||||||
RenderPassManager *rpm = getRenderPass();
|
if ( activate )
|
||||||
if ( !rpm )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Hunt for the pre-pass manager/target
|
|
||||||
RenderPrePassMgr *prePassBin = NULL;
|
|
||||||
for( U32 i = 0; i < rpm->getManagerCount(); i++ )
|
|
||||||
{
|
{
|
||||||
RenderBinManager *bin = rpm->getManager(i);
|
RenderPassManager *rpm = getRenderPass();
|
||||||
if( bin->getRenderInstType() == RenderPrePassMgr::RIT_PrePass )
|
if ( !rpm )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Hunt for the pre-pass manager/target
|
||||||
|
RenderPrePassMgr *prePassBin = NULL;
|
||||||
|
for( U32 i = 0; i < rpm->getManagerCount(); i++ )
|
||||||
{
|
{
|
||||||
prePassBin = (RenderPrePassMgr*)bin;
|
RenderBinManager *bin = rpm->getManager(i);
|
||||||
break;
|
if( bin->getRenderInstType() == RenderPrePassMgr::RIT_PrePass )
|
||||||
|
{
|
||||||
|
prePassBin = (RenderPrePassMgr*)bin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If we found the prepass bin, set this bin to render very shortly afterwards
|
// If we found the prepass bin, set this bin to render very shortly afterwards
|
||||||
// and re-add this render-manager. If there is no pre-pass bin, or it doesn't
|
// and re-add this render-manager. If there is no pre-pass bin, or it doesn't
|
||||||
// have a depth-texture, we can't render offscreen.
|
// have a depth-texture, we can't render offscreen.
|
||||||
mOffscreenRenderEnabled = prePassBin && (prePassBin->getTargetChainLength() > 0);
|
mOffscreenRenderEnabled = prePassBin && (prePassBin->getTargetChainLength() > 0);
|
||||||
if(mOffscreenRenderEnabled)
|
if(mOffscreenRenderEnabled)
|
||||||
{
|
{
|
||||||
rpm->removeManager(this);
|
rpm->removeManager(this);
|
||||||
setRenderOrder( prePassBin->getRenderOrder() + 0.011f );
|
setRenderOrder( prePassBin->getRenderOrder() + 0.011f );
|
||||||
rpm->addManager(this);
|
rpm->addManager(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the targets we use
|
// Find the targets we use
|
||||||
mPrepassTarget = NamedTexTarget::find( "prepass" );
|
mPrepassTarget = NamedTexTarget::find( "prepass" );
|
||||||
mEdgeTarget = NamedTexTarget::find( "edge" );
|
mEdgeTarget = NamedTexTarget::find( "edge" );
|
||||||
|
|
||||||
// Setup the shader
|
// Setup the shader
|
||||||
if ( activate )
|
|
||||||
_initShader();
|
_initShader();
|
||||||
|
|
||||||
if ( mScreenQuadVertBuff.isNull() )
|
if ( mScreenQuadVertBuff.isNull() )
|
||||||
_initGFXResources();
|
_initGFXResources();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mStencilClearSB = NULL;
|
||||||
|
mScreenQuadPrimBuff = NULL;
|
||||||
|
mScreenQuadVertBuff = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GFXStateBlockRef RenderParticleMgr::_getOffscreenStateBlock(ParticleRenderInst *ri)
|
GFXStateBlockRef RenderParticleMgr::_getOffscreenStateBlock(ParticleRenderInst *ri)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue