Resource* ResourceManager::prepareResource( ResourceLoadOptions& options ) { const Path& path = options.name; Stream* stream = archive->openFile(path, GetResourcesAllocator()); if( !stream ) { LogWarn("Resource was not found: '%s'", path.c_str()); return nullptr; } const Path& file = PathGetFile(path); // Get the available resource loader and prepare the resource. ResourceLoader* loader = findLoader( PathGetFileExtension(file) ); if( !loader ) { LogWarn("No resource loader found for resource '%s'", file.c_str()); return nullptr; } options.stream = stream; Resource* resource = loader->prepare(options); if( !resource ) { LogError("Error preparing resource: '%s'", path.c_str()); return nullptr; } resource->setStatus( ResourceStatus::Loading ); resource->setPath( file ); options.resource = resource; return resource; }