]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texture3d.cpp
Implement sub_image for TextureCube also
[libs/gl.git] / source / texture3d.cpp
index 8b014aee0c262fb811444c1c44a1fba0083df21e..5c9f009c0d5eb6d798a06b9a64fd783341430e38 100644 (file)
@@ -11,6 +11,15 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
+Texture3D::Texture3D(GLenum t):
+       Texture(t),
+       ifmt(RGB),
+       width(0),
+       height(0),
+       depth(0),
+       allocated(0)
+{ }
+
 Texture3D::Texture3D():
        Texture(GL_TEXTURE_3D),
        ifmt(RGB),
@@ -28,12 +37,15 @@ void Texture3D::storage(PixelFormat fmt, unsigned wd, unsigned ht, unsigned dp)
                throw invalid_operation("Texture3D::storage");
        if(wd==0 || ht==0 || dp==0)
                throw invalid_argument("Texture3D::storage");
+
+       if(MSP_sized_internal_formats)
+               fmt = get_sized_pixelformat(fmt);
        require_pixelformat(fmt);
 
+       ifmt = fmt;
        width = wd;
        height = ht;
        depth = dp;
-       ifmt = fmt;
 }
 
 void Texture3D::allocate(unsigned level)
@@ -161,7 +173,8 @@ void Texture3D::get_level_size(unsigned level, unsigned &w, unsigned &h, unsigne
 {
        w >>= level;
        h >>= level;
-       d >>= level;
+       if(target!=GL_TEXTURE_2D_ARRAY)
+               d >>= level;
 
        if(!w && (h || d))
                w = 1;