void CClientLeafSystem::RemoveRenderable( ClientRenderHandle_t handle ) { // This can happen upon level shutdown if (!m_Renderables.IsValidIndex(handle)) return; // Reset the render handle in the entity. IClientRenderable *pRenderable = m_Renderables[handle].m_pRenderable; Assert( handle == pRenderable->RenderHandle() ); pRenderable->RenderHandle() = INVALID_CLIENT_RENDER_HANDLE; // Reemove the renderable from the dirty list if ( m_Renderables[handle].m_Flags & RENDER_FLAGS_HASCHANGED ) { // NOTE: This isn't particularly fast (linear search), // but I'm assuming it's an unusual case where we remove // renderables that are changing or that m_DirtyRenderables usually // only has a couple entries int i = m_DirtyRenderables.Find( handle ); Assert( i != m_DirtyRenderables.InvalidIndex() ); m_DirtyRenderables.FastRemove( i ); } if ( IsViewModelRenderGroup( (RenderGroup_t)m_Renderables[handle].m_RenderGroup ) ) { RemoveFromViewModelList( handle ); } RemoveFromTree( handle ); m_Renderables.Remove( handle ); }
//----------------------------------------------------------------------------- // Call this when the element moves //----------------------------------------------------------------------------- void CBSPTreeData::ElementMoved( BSPTreeDataHandle_t handle, Vector const& mins, Vector const& maxs ) { if (handle != TREEDATA_INVALID_HANDLE) { RemoveFromTree( handle ); InsertIntoTree( handle, mins, maxs ); } }
void CBSPTreeData::Remove( BSPTreeDataHandle_t handle ) { if (!m_Handles.IsValidIndex(handle)) return; RemoveFromTree( handle ); m_Handles.Free( handle ); }
//----------------------------------------------------------------------------- // This is what happens before rendering a particular view //----------------------------------------------------------------------------- void CClientLeafSystem::PreRender() { VPROF( "CClientLeafSystem::PreRender" ); // Iterate through all renderables and tell them to compute their FX blend for ( int i = m_DirtyRenderables.Count(); --i >= 0; ) { ClientRenderHandle_t handle = m_DirtyRenderables[i]; RenderableInfo_t& renderable = m_Renderables[ handle ]; Assert( renderable.m_Flags & RENDER_FLAGS_HASCHANGED ); // Update position in leaf system RemoveFromTree( handle ); InsertIntoTree( handle ); renderable.m_Flags &= ~RENDER_FLAGS_HASCHANGED; } m_DirtyRenderables.RemoveAll(); }