]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texture2d.cpp
Move srgb handling to storage_pixelformat_from_graphics
[libs/gl.git] / source / texture2d.cpp
index 41763586c7dcfc9e81572907b44d00069e5dbf70..d435a356a9ef3f215c6f11d912e1c76fade17959 100644 (file)
@@ -40,6 +40,11 @@ Texture2D::Texture2D(ResourceManager *m):
        allocated(0)
 { }
 
+Texture2D::~Texture2D()
+{
+       set_manager(0);
+}
+
 void Texture2D::storage(PixelFormat fmt, unsigned wd, unsigned ht)
 {
        if(width>0)
@@ -58,7 +63,8 @@ void Texture2D::allocate(unsigned level)
        if(allocated&(1<<level))
                return;
 
-       image(level, get_base_pixelformat(ifmt), UNSIGNED_BYTE, 0);
+       PixelFormat base_fmt = get_base_pixelformat(ifmt);
+       image(level, base_fmt, get_alloc_type(base_fmt), 0);
 }
 
 void Texture2D::image(unsigned level, PixelFormat fmt, DataType type, const void *data)
@@ -112,12 +118,7 @@ void Texture2D::image(const Graphics::Image &img, bool srgb, bool from_buffer)
        unsigned h = img.get_height();
        PixelFormat fmt = pixelformat_from_graphics(img.get_format());
        if(width==0)
-       {
-               PixelFormat f = storage_pixelformat_from_graphics(img.get_format());
-               if(srgb)
-                       f = get_srgb_pixelformat(f);
-               storage(f, w, h);
-       }
+               storage(storage_pixelformat_from_graphics(img.get_format(), srgb), w, h);
        else if(w!=width || h!=height)
                throw incompatible_data("Texture2D::image");