X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftexture.cpp;h=aec1bc92da90b9b84f8882991f9b6bf4a24d84c2;hb=6c525eff3eaaa617648a869449ed3bddf9c1936d;hp=fe8b7be9a3e4fbb56dda02464bfb0541d8e131ce;hpb=126161d1d44ab9503bc747d24a07b7b9d15e527a;p=libs%2Fgl.git diff --git a/source/texture.cpp b/source/texture.cpp index fe8b7be9..aec1bc92 100644 --- a/source/texture.cpp +++ b/source/texture.cpp @@ -2,6 +2,8 @@ #include #include #include "error.h" +#include "resourcemanager.h" +#include "resources.h" #include "texture.h" #include "texunit.h" @@ -42,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), @@ -54,12 +57,16 @@ 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); + if(id) + glDeleteTextures(1, &id); } void Texture::update_parameter(int mask) const @@ -175,6 +182,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); @@ -209,8 +219,24 @@ void Texture::unbind_from(unsigned i) Texture::Loader::Loader(Texture &t): - DataFile::ObjectLoader(t) + DataFile::CollectionObjectLoader(t, 0) +{ + init(); +} + +Texture::Loader::Loader(Texture &t, Collection &c): + DataFile::CollectionObjectLoader(t, &c) { + init(); +} + +void Texture::Loader::init() +{ + if(Resources *res = dynamic_cast(coll)) + srgb = res->get_srgb_conversion(); + else + srgb = false; + add("filter", &Loader::filter); add("max_anisotropy", &Loader::max_anisotropy); add("generate_mipmap", &Loader::generate_mipmap);