]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texture.cpp
Don't leak AsyncUpdaters if Mesh async loading is aborted
[libs/gl.git] / source / texture.cpp
index a23e57c72615ed632e67c863e9ed37539842dcd2..cf08ac6371ceeacad9f362a49b3970d887e3398f 100644 (file)
@@ -65,6 +65,9 @@ Texture::Texture(GLenum t, ResourceManager *m):
 
 Texture::~Texture()
 {
+       while(TexUnit *unit = TexUnit::find_unit(this))
+               unbind_from(unit->get_index());
+
        if(id)
                glDeleteTextures(1, &id);
 }
@@ -179,12 +182,23 @@ void Texture::set_compare_func(Predicate f)
 void Texture::bind_to(unsigned i) const
 {
        if(!id)
-               manager->load_resource(*this);
+       {
+               if(manager)
+                       manager->resource_used(*this);
+               if(!id)
+               {
+                       unbind_from(i);
+                       return;
+               }
+       }
 
        TexUnit &unit = TexUnit::get_unit(i);
        const Texture *cur = unit.get_texture();
        if(unit.set_texture(this))
        {
+               if(manager)
+                       manager->resource_used(*this);
+
                unit.bind();
                if(cur && cur->target!=target)
                        glDisable(cur->target);