]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resourcemanager.cpp
Throw a resource_load_error if the source could not be opened
[libs/gl.git] / source / resourcemanager.cpp
index 40dcff9bc36876b649edaec7c0aeecca0aee45c1..733cfaff8c4c37ba5ae1ffbd605ceb3f8d6a58df 100644 (file)
@@ -11,6 +11,10 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
+resource_load_error::resource_load_error(const string &name, const string &err):
+       runtime_error(format("%s: %s", name, err))
+{ }
+
 resource_load_error::resource_load_error(const string &name, const exception &exc):
        runtime_error(format("%s: %s: %s", name, Debug::demangle(typeid(exc).name()), exc.what()))
 { }
@@ -111,7 +115,7 @@ void ResourceManager::load_resource(Resource &r)
        }
 }
 
-bool ResourceManager::is_resource_loaded(const Resource &r)
+bool ResourceManager::is_resource_loaded(const Resource &r) const
 {
        ManagedResource *managed = reinterpret_cast<ManagedResource *>(r.get_manager_data());
        return managed ? managed->state==ManagedResource::LOADED : false;
@@ -120,6 +124,8 @@ bool ResourceManager::is_resource_loaded(const Resource &r)
 void ResourceManager::resource_used(const Resource &r)
 {
        ManagedResource *managed = reinterpret_cast<ManagedResource *>(r.get_manager_data());
+       if(!managed)
+               return;
        if(managed->state==ManagedResource::NOT_LOADED && policy!=LOAD_MANUALLY)
                load_resource(*managed->resource);
 
@@ -274,6 +280,9 @@ ResourceManager::ManagedResource::ManagedResource(Resource &r):
 void ResourceManager::ManagedResource::start_loading()
 {
        io = location.collection->open_raw(location.name);
+       if(!io)
+               throw resource_load_error(location.name, "open failed");
+
        loader = resource->load(*io);
        if(!loader)
        {