9 void Texture1D::storage(PixelFormat fmt, unsigned wd, unsigned lv)
13 if(fmt!=format || wd!=width || (lv && lv!=levels))
14 throw incompatible_data("Texture1D::storage");
18 throw invalid_argument("Texture1D::storage");
22 levels = get_n_levels();
24 levels = min(levels, lv);
29 void Texture1D::image(unsigned level, const void *data)
31 return sub_image(level, 0, get_level_size(level), data);
34 void Texture1D::sub_image(unsigned level, unsigned x, unsigned wd, const void *data)
37 throw invalid_operation("Texture1D::sub_image");
38 if(level>=levels || x>width || x+wd>width)
39 throw out_of_range("Texture1D::sub_image");
41 Texture1DBackend::sub_image(level, x, wd, data);
44 void Texture1D::image(const Graphics::Image &img, unsigned lv)
46 if(img.get_height()!=1)
47 throw incompatible_data("Texture1D::image");
49 storage(pixelformat_from_image(img, use_srgb_format), img.get_width(), lv);
50 image(0, img.get_pixels());
53 unsigned Texture1D::get_n_levels() const
56 for(unsigned s=width; s; s>>=1, ++n) ;
60 unsigned Texture1D::get_level_size(unsigned level) const
66 Texture1D::Loader::Loader(Texture1D &t):
67 DataFile::DerivedObjectLoader<Texture1D, Texture::Loader>(t)
72 Texture1D::Loader::Loader(Texture1D &t, Collection &c):
73 DataFile::DerivedObjectLoader<Texture1D, Texture::Loader>(t, c)
78 void Texture1D::Loader::init()
80 add("storage", &Loader::storage);
81 add("storage", &Loader::storage_levels);
84 void Texture1D::Loader::storage(PixelFormat fmt, unsigned w)
89 void Texture1D::Loader::storage_levels(PixelFormat fmt, unsigned w, unsigned l)
91 obj.storage(fmt, w, l);