diff --git a/game/client/clientleafsystem.cpp b/game/client/clientleafsystem.cpp index c00481fdce..1d591e2fcd 100644 --- a/game/client/clientleafsystem.cpp +++ b/game/client/clientleafsystem.cpp @@ -1151,6 +1151,8 @@ bool CClientLeafSystem::EnumerateLeaf( int leaf, intp context ) void CClientLeafSystem::InsertIntoTree( ClientRenderHandle_t &handle ) { + VPROF_BUDGET( "CClientLeafSystem::PreRender", "InsertIntoTree" ); + if ( ThreadInMainThread() ) { // When we insert into the tree, increase the shadow enumerator @@ -1181,6 +1183,8 @@ void CClientLeafSystem::InsertIntoTree( ClientRenderHandle_t &handle ) //----------------------------------------------------------------------------- void CClientLeafSystem::RemoveFromTree( ClientRenderHandle_t handle ) { + VPROF_BUDGET( "CClientLeafSystem::PreRender", "RemoveFromTree" ); + m_RenderablesInLeaf.RemoveElement( handle ); // Remove all shadows cast onto the object diff --git a/game/client/clientshadowmgr.cpp b/game/client/clientshadowmgr.cpp index ebfb8fcf85..223ff234da 100644 --- a/game/client/clientshadowmgr.cpp +++ b/game/client/clientshadowmgr.cpp @@ -2906,47 +2906,50 @@ void CClientShadowMgr::PreRender() } } - // - // -- Render to Texture Shadows ----------------------- - // - - bool bRenderToTextureActive = r_shadowrendertotexture.GetBool(); - if ( bRenderToTextureActive != m_RenderToTextureActive ) { - if ( m_RenderToTextureActive ) + VPROF_BUDGET( "CClientShadowMgr::PreRender (after depth texturing)", VPROF_BUDGETGROUP_SHADOW_RENDERING ); + // + // -- Render to Texture Shadows ----------------------- + // + + bool bRenderToTextureActive = r_shadowrendertotexture.GetBool(); + if ( bRenderToTextureActive != m_RenderToTextureActive ) { - ShutdownRenderToTextureShadows(); - } - else - { - InitRenderToTextureShadows(); + if ( m_RenderToTextureActive ) + { + ShutdownRenderToTextureShadows(); + } + else + { + InitRenderToTextureShadows(); + } + + UpdateAllShadows(); + return; } - UpdateAllShadows(); - return; + m_bUpdatingDirtyShadows = true; + + unsigned short i = m_DirtyShadows.FirstInorder(); + while ( i != m_DirtyShadows.InvalidIndex() ) + { + ClientShadowHandle_t& handle = m_DirtyShadows[ i ]; + Assert( m_Shadows.IsValidIndex( handle ) ); + UpdateProjectedTextureInternal( handle, false ); + i = m_DirtyShadows.NextInorder(i); + } + m_DirtyShadows.RemoveAll(); + + // Transparent shadows must remain dirty, since they were not re-projected + int nCount = m_TransparentShadows.Count(); + for ( int i = 0; i < nCount; ++i ) + { + m_DirtyShadows.Insert( m_TransparentShadows[i] ); + } + m_TransparentShadows.RemoveAll(); + + m_bUpdatingDirtyShadows = false; } - - m_bUpdatingDirtyShadows = true; - - unsigned short i = m_DirtyShadows.FirstInorder(); - while ( i != m_DirtyShadows.InvalidIndex() ) - { - ClientShadowHandle_t& handle = m_DirtyShadows[ i ]; - Assert( m_Shadows.IsValidIndex( handle ) ); - UpdateProjectedTextureInternal( handle, false ); - i = m_DirtyShadows.NextInorder(i); - } - m_DirtyShadows.RemoveAll(); - - // Transparent shadows must remain dirty, since they were not re-projected - int nCount = m_TransparentShadows.Count(); - for ( int i = 0; i < nCount; ++i ) - { - m_DirtyShadows.Insert( m_TransparentShadows[i] ); - } - m_TransparentShadows.RemoveAll(); - - m_bUpdatingDirtyShadows = false; }