X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fcore%2Ftexture.cpp;h=354c1b12d5307b53113c0ae7080f2635c3e0f3a9;hb=9f6bb77743014e4321e783aae5e84af1c925e572;hp=3a4b1096f99cb2edee54137194f64cb3b805b808;hpb=baf53e7a2db1c27376a04b088b6954eeee81f009;p=libs%2Fgl.git diff --git a/source/core/texture.cpp b/source/core/texture.cpp index 3a4b1096..354c1b12 100644 --- a/source/core/texture.cpp +++ b/source/core/texture.cpp @@ -34,10 +34,8 @@ Texture::Texture(GLenum t, ResourceManager *m): { if(m) set_manager(m); - else if(ARB_direct_state_access) - glCreateTextures(target, 1, &id); else - glGenTextures(1, &id); + generate_id(); } Texture::~Texture() @@ -49,6 +47,16 @@ Texture::~Texture() glDeleteTextures(1, &id); } +void Texture::generate_id() +{ + if(id) + throw invalid_operation("Texture::generate_id"); + if(ARB_direct_state_access) + glCreateTextures(target, 1, &id); + else + glGenTextures(1, &id); +} + void Texture::set_format(PixelFormat fmt) { PixelComponents comp = get_components(fmt); @@ -353,6 +361,13 @@ void Texture::Loader::generate_mipmap(bool gm) void Texture::Loader::image_data(const string &data) { + if(obj.manager) + { + obj.set_manager(0); + if(!obj.id) + obj.generate_id(); + } + Graphics::Image img; IO::Memory mem(data.data(), data.size()); img.load_io(mem);