1 #include <msp/io/memory.h>
3 #include "resourcemanager.h"
11 Texture::Texture(unsigned t, ResourceManager *m):
12 TextureBackend(t, !m),
13 format(NO_PIXELFORMAT),
16 use_srgb_format(false),
17 auto_gen_mipmap(false)
23 void Texture::set_format(PixelFormat fmt)
25 PixelComponents comp = get_components(fmt);
26 PixelComponents st_comp = comp;
27 FormatSwizzle swiz = NO_SWIZZLE;
32 swiz = R_TO_LUMINANCE;
36 swiz = RG_TO_LUMINANCE_ALPHA;
49 PixelFormat st_fmt = make_pixelformat(st_comp, get_component_type(fmt), is_srgb(fmt));
50 require_pixelformat(st_fmt);
59 void Texture::load_image(const string &fn, unsigned lv)
68 Texture::Loader::Loader(Texture &t):
69 DataFile::CollectionObjectLoader<Texture>(t, 0)
74 Texture::Loader::Loader(Texture &t, Collection &c):
75 DataFile::CollectionObjectLoader<Texture>(t, &c)
80 void Texture::Loader::init()
84 add("external_image", &Loader::external_image);
85 add("external_image_srgb", &Loader::external_image_srgb);
86 add("generate_mipmap", &Loader::generate_mipmap);
87 add("image_data", &Loader::image_data);
88 add("mipmap_levels", &Loader::mipmap_levels);
91 void Texture::Loader::finish()
93 if(obj.auto_gen_mipmap)
94 obj.generate_mipmap();
97 void Texture::Loader::load_external_image(Graphics::Image &img, const string &fn)
99 RefPtr<IO::Seekable> io = get_collection().open_raw(fn);
101 throw IO::file_not_found(fn);
105 void Texture::Loader::external_image(const string &fn)
107 obj.use_srgb_format = false;
108 external_image_common(fn);
111 void Texture::Loader::external_image_srgb(const string &fn)
113 obj.use_srgb_format = true;
114 external_image_common(fn);
117 void Texture::Loader::external_image_common(const string &fn)
120 obj.manager->set_resource_location(obj, get_collection(), fn);
124 load_external_image(img, fn);
125 obj.image(img, levels);
129 void Texture::Loader::generate_mipmap(bool gm)
131 obj.auto_gen_mipmap = gm;
134 void Texture::Loader::image_data(const string &data)
144 IO::Memory mem(data.data(), data.size());
147 obj.image(img, levels);
150 void Texture::Loader::mipmap_levels(unsigned l)