X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Ftexture.cpp;h=0fa65eadaed0f7b31508c6e9e4fa55a2d6ba4cfe;hb=5ae4b00;hp=d738bb36e9a63c2df69ef97a205e292b59aa5b49;hpb=e37851b98dde5082ee92570354746f2f92e21940;p=libs%2Fgl.git diff --git a/source/texture.cpp b/source/texture.cpp index d738bb36..0fa65ead 100644 --- a/source/texture.cpp +++ b/source/texture.cpp @@ -2,6 +2,7 @@ #include #include #include "error.h" +#include "resourcemanager.h" #include "resources.h" #include "texture.h" #include "texunit.h" @@ -43,7 +44,8 @@ void operator>>(const LexicalConverter &c, TextureWrap &tw) } -Texture::Texture(GLenum t): +Texture::Texture(GLenum t, ResourceManager *m): + id(0), target(t), min_filter(NEAREST_MIPMAP_LINEAR), mag_filter(LINEAR), @@ -55,12 +57,19 @@ Texture::Texture(GLenum t): cmp_func(LEQUAL), dirty_params(0) { - glGenTextures(1, &id); + if(m) + set_manager(m); + else + glGenTextures(1, &id); } Texture::~Texture() { - glDeleteTextures(1, &id); + while(TexUnit *unit = TexUnit::find_unit(this)) + unbind_from(unit->get_index()); + + if(id) + glDeleteTextures(1, &id); } void Texture::update_parameter(int mask) const @@ -176,6 +185,9 @@ void Texture::bind_to(unsigned i) const 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);