]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/texture3d.cpp
Allow repeated storage calls with the same parameters
[libs/gl.git] / source / core / texture3d.cpp
index 1681f83c6f528b949be627adb9fddf311556806a..a268857d4996cd9bc08d98d9d5c8918bc7d25a3c 100644 (file)
@@ -36,7 +36,11 @@ Texture3D::Texture3D():
 void Texture3D::storage(PixelFormat fmt, unsigned wd, unsigned ht, unsigned dp, unsigned lv)
 {
        if(width>0)
-               throw invalid_operation("Texture3D::storage");
+       {
+               if(fmt!=format || wd!=width || ht!=height || dp!=depth || (lv && lv!=levels))
+                       throw incompatible_data("Texture3D::storage");
+               return;
+       }
        if(wd==0 || ht==0 || dp==0)
                throw invalid_argument("Texture3D::storage");
 
@@ -149,10 +153,7 @@ void Texture3D::image(const Graphics::Image &img, unsigned lv)
        h = w;
 
        PixelFormat fmt = pixelformat_from_image(img);
-       if(width==0)
-               storage(make_pixelformat(get_components(fmt), get_component_type(fmt), use_srgb_format), w, h, d, lv);
-       else if(w!=width || h!=height || d!=depth)
-               throw incompatible_data("Texture3D::load_image");
+       storage(make_pixelformat(get_components(fmt), get_component_type(fmt), use_srgb_format), w, h, d, lv);
 
        PixelStore pstore = PixelStore::from_image(img);
        BindRestore _bind_ps(pstore);