NAMESPACE_RESOURCES_BEGIN //-----------------------------------// void ResourceTaskRun(Task* task) { ResourceLoadOptions* options = (ResourceLoadOptions*) task->userdata; Stream* stream = options->stream; Resource* resource = options->resource; const Path& path = resource->getPath(); ResourceManager* res = GetResourceManager(); ResourceLoader* loader = res->findLoader( PathGetFileExtension(path) ); bool decoded = loader->decode(*options); if( !decoded ) { resource->setStatus( ResourceStatus::Error ); LogWarn("Error decoding resource '%s'", path.CString()); goto cleanup; } resource->setStatus( ResourceStatus::Loaded ); LogInfo("Loaded resource '%s'", path.CString()); if( options->sendLoadEvent ) { ResourceEvent event; event.resource = resource; res->resourceEvents.push_back(event); } cleanup: res->numResourcesQueuedLoad.decrement(); res->resourceFinishLoad->wakeOne(); if( !options->keepStreamOpen ) Deallocate(stream); Deallocate(options); }