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:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user