Skip to content

Commit ac19e0e

Browse files
authored
Merge pull request GarageGames#1928 from lukaspj/particle-manager-lmactivate-cleanup
Cleanup when deactivating light manager instead of reinitializing
2 parents 7185d96 + f50d46d commit ac19e0e

File tree

1 file changed

+37
-29
lines changed

1 file changed

+37
-29
lines changed

Engine/source/renderInstance/renderParticleMgr.cpp

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -589,43 +589,51 @@ bool RenderParticleMgr::_initShader()
589589

590590
void RenderParticleMgr::_onLMActivate( const char*, bool activate )
591591
{
592-
RenderPassManager *rpm = getRenderPass();
593-
if ( !rpm )
594-
return;
595-
596-
// Hunt for the pre-pass manager/target
597-
RenderPrePassMgr *prePassBin = NULL;
598-
for( U32 i = 0; i < rpm->getManagerCount(); i++ )
592+
if ( activate )
599593
{
600-
RenderBinManager *bin = rpm->getManager(i);
601-
if( bin->getRenderInstType() == RenderPrePassMgr::RIT_PrePass )
594+
RenderPassManager *rpm = getRenderPass();
595+
if ( !rpm )
596+
return;
597+
598+
// Hunt for the pre-pass manager/target
599+
RenderPrePassMgr *prePassBin = NULL;
600+
for( U32 i = 0; i < rpm->getManagerCount(); i++ )
602601
{
603-
prePassBin = (RenderPrePassMgr*)bin;
604-
break;
602+
RenderBinManager *bin = rpm->getManager(i);
603+
if( bin->getRenderInstType() == RenderPrePassMgr::RIT_PrePass )
604+
{
605+
prePassBin = (RenderPrePassMgr*)bin;
606+
break;
607+
}
605608
}
606-
}
607609

608-
// If we found the prepass bin, set this bin to render very shortly afterwards
609-
// and re-add this render-manager. If there is no pre-pass bin, or it doesn't
610-
// have a depth-texture, we can't render offscreen.
611-
mOffscreenRenderEnabled = prePassBin && (prePassBin->getTargetChainLength() > 0);
612-
if(mOffscreenRenderEnabled)
613-
{
614-
rpm->removeManager(this);
615-
setRenderOrder( prePassBin->getRenderOrder() + 0.011f );
616-
rpm->addManager(this);
617-
}
610+
// If we found the prepass bin, set this bin to render very shortly afterwards
611+
// and re-add this render-manager. If there is no pre-pass bin, or it doesn't
612+
// have a depth-texture, we can't render offscreen.
613+
mOffscreenRenderEnabled = prePassBin && (prePassBin->getTargetChainLength() > 0);
614+
if(mOffscreenRenderEnabled)
615+
{
616+
rpm->removeManager(this);
617+
setRenderOrder( prePassBin->getRenderOrder() + 0.011f );
618+
rpm->addManager(this);
619+
}
618620

619-
// Find the targets we use
620-
mPrepassTarget = NamedTexTarget::find( "prepass" );
621-
mEdgeTarget = NamedTexTarget::find( "edge" );
621+
// Find the targets we use
622+
mPrepassTarget = NamedTexTarget::find( "prepass" );
623+
mEdgeTarget = NamedTexTarget::find( "edge" );
622624

623-
// Setup the shader
624-
if ( activate )
625+
// Setup the shader
625626
_initShader();
626627

627-
if ( mScreenQuadVertBuff.isNull() )
628-
_initGFXResources();
628+
if ( mScreenQuadVertBuff.isNull() )
629+
_initGFXResources();
630+
}
631+
else
632+
{
633+
mStencilClearSB = NULL;
634+
mScreenQuadPrimBuff = NULL;
635+
mScreenQuadVertBuff = NULL;
636+
}
629637
}
630638

631639
GFXStateBlockRef RenderParticleMgr::_getOffscreenStateBlock(ParticleRenderInst *ri)

0 commit comments

Comments
 (0)