예제 #1
0
// PreloadResource queues a resource to be preloaded outside of the main thread.
void ResourceManager::PreloadResource( const Filename& filename )
{
    const std::string& extension = filename.GetExtension();

    // If the extension isn't registered, we can't load this resource
    ExtensionMap::iterator extensionIter = mRegisteredExtensions.find( extension );
    if ( extensionIter == mRegisteredExtensions.end() )
    {
        return;
    }

    ExtensionData* extensionData = extensionIter->second;
    ResourceGeneric* pResource = extensionData->GetFactoryFunction()( filename );
    SDL_assert( pResource != nullptr );

    mResources[ filename.GetFullPath() ] = pResource;

    SDL_LockMutex( m_pPendingJobsMutex );
    m_PendingJobs.push_back( pResource );
    pResource->SetState( ResourceState::PreloadPending );
    SDL_UnlockMutex( m_pPendingJobsMutex );
}