int ResourceManager::UnloadAll() { std::vector<Resource*>::iterator i; for (i = resource_list_.begin(); i!= resource_list_.end(); ++i) { Resource* res = (*i); res->Unload(); delete res; } return S_OK; }
void ResourceManager::ProcessRequests() { ResourceRequestStack toDeleteResources; // Proceed resource loading while ( ! pendingResources.Empty() ) { ResourceRequest req = pendingResources.Back(); pendingResources.PopBack(); if ( req.m_res->GetRefCount() == 0 ) { toDeleteResources.PushBack( req ); } else if ( ! req.m_res->IsLoaded() ) { void * data = 0; SizeT size; if ( ! ( FileSystem::Load( req.m_path, data, size ) && req.m_res->Load( data ) ) ) { req.m_res->m_state &= ~Resource::VALID; } req.m_res->m_state |= Resource::LOADED; req.m_res->m_state &= ~Resource::PENDING; UnknownAllocator::Deallocate( data ); } } pendingResources = toDeleteResources; // Delete unreferenced resources while ( ! pendingResources.Empty() ) { Resource * res = pendingResources.Back().m_res; pendingResources.PopBack(); if ( res->GetRefCount() == 0 ) { resourceTable.Remove( res->GetId() ); if ( res->IsLoaded() ) res->Unload(); res->~Resource(); UnknownAllocator::Deallocate( res ); } else { res->m_state &= ~Resource::PENDING; } } pendingResources.Reserve( 0 ); }