]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texture2d.cpp
Additional overloads for creating pipelines
[libs/gl.git] / source / texture2d.cpp
index 8ecebdfb6e1748132bf39a14040f5bae8704aa33..7ce18d00a9fa075b5df6b2a5ea1dac741411165f 100644 (file)
@@ -36,7 +36,6 @@ public:
 
 Texture2D::Texture2D(ResourceManager *m):
        Texture(GL_TEXTURE_2D, m),
-       ifmt(RGB),
        width(0),
        height(0),
        allocated(0)
@@ -54,11 +53,7 @@ void Texture2D::storage(PixelFormat fmt, unsigned wd, unsigned ht)
        if(wd==0 || ht==0)
                throw invalid_argument("Texture2D::storage");
 
-       if(MSP_sized_internal_formats)
-               fmt = get_sized_pixelformat(fmt);
-       require_pixelformat(fmt);
-
-       ifmt = fmt;
+       set_internal_format(fmt);
        width = wd;
        height = ht;
 }
@@ -100,7 +95,7 @@ void Texture2D::image(unsigned level, PixelFormat fmt, DataType type, const void
                return sub_image(level, 0, 0, w, h, fmt, type, data);
 
        BindRestore _bind(this);
-       glTexImage2D(target, level, ifmt, w, h, 0, fmt, type, data);
+       glTexImage2D(target, level, ifmt, w, h, 0, get_upload_format(fmt), type, data);
 
        allocated |= 1<<level;
        if(gen_mipmap && level==0)
@@ -118,6 +113,7 @@ void Texture2D::sub_image(unsigned level, int x, int y, unsigned wd, unsigned ht
        Conditional<BindRestore> _bind(!ARB_direct_state_access, this);
        allocate(level);
 
+       fmt = get_upload_format(fmt);
        if(ARB_direct_state_access)
                glTextureSubImage2D(id, level, x, y, wd, ht, fmt, type, data);
        else
@@ -176,7 +172,7 @@ Resource::AsyncLoader *Texture2D::load(IO::Seekable &io, const Resources *res)
 
 UInt64 Texture2D::get_data_size() const
 {
-       return id ? width*height*get_component_count(ifmt) : 0;
+       return id ? width*height*get_pixel_size(ifmt) : 0;
 }
 
 void Texture2D::unload()