Made resource loading fail gracefully when a resource can't be loaded. Resources should now throw exceptions in their constuctor if the resource can't be loaded. This will result in ResourceManager::Load returning null.

This commit is contained in:
2015-12-13 20:04:50 +01:00
parent 91ace0d2a0
commit 524af211e0
3 changed files with 15 additions and 6 deletions
+11 -5
View File
@@ -100,7 +100,7 @@ Resource* ResourceManager::Load(std::string resourceType, std::string resourceNa
LOG_WARNING("Hot-loading resource \"%s\"", resourceName.c_str()); LOG_WARNING("Hot-loading resource \"%s\"", resourceName.c_str());
} }
return CreateResource(resourceType, resourceName, parent); return CreateResource(resourceType, resourceName, parent);
} }
Resource* ResourceManager::CreateResource(std::string resourceType, std::string resourceName, Resource* parent) Resource* ResourceManager::CreateResource(std::string resourceType, std::string resourceName, Resource* parent)
@@ -112,10 +112,16 @@ Resource* ResourceManager::CreateResource(std::string resourceType, std::string
} }
// Call the factory function // Call the factory function
Resource* resource = facIt->second(resourceName); Resource* resource;
// Store IDs try {
resource->TypeID = GetTypeID(resourceType); resource = facIt->second(resourceName);
resource->ResourceID = GetNewResourceID(resource->TypeID); // Store IDs
resource->TypeID = GetTypeID(resourceType);
resource->ResourceID = GetNewResourceID(resource->TypeID);
} catch (const std::exception& e) {
resource = nullptr;
LOG_ERROR("Failed to load resource \"%s\" of type \"%s\": %s", resourceName.c_str(), resourceType.c_str(), e.what());
}
// Cache // Cache
m_ResourceCache[std::make_pair(resourceType, resourceName)] = resource; m_ResourceCache[std::make_pair(resourceType, resourceName)] = resource;
m_ResourceFromName[resourceName] = resource; m_ResourceFromName[resourceName] = resource;
+1 -1
View File
@@ -8,7 +8,7 @@ RawModel::RawModel(std::string fileName)
if (scene == nullptr) { if (scene == nullptr) {
LOG_ERROR("Failed to load model \"%s\"", fileName.c_str()); LOG_ERROR("Failed to load model \"%s\"", fileName.c_str());
LOG_ERROR("Assimp error: %s", importer.GetErrorString()); LOG_ERROR("Assimp error: %s", importer.GetErrorString());
return; throw std::runtime_error("Failed to open model file.");
} }
auto m = scene->mRootNode->mTransformation; auto m = scene->mRootNode->mTransformation;
@@ -77,6 +77,9 @@ void RenderQueueFactory::FillModels(World* world, RenderQueue* renderQueue)
} }
glm::vec4 color = modelC["Color"]; glm::vec4 color = modelC["Color"];
Model* model = ResourceManager::Load<Model>(resource); Model* model = ResourceManager::Load<Model>(resource);
if (model == nullptr) {
model = ResourceManager::Load<Model>("Models/Core/Error.obj");
}
for (auto texGroup : model->TextureGroups) { for (auto texGroup : model->TextureGroups) {
ModelJob job; ModelJob job;