1 #include <msp/io/memory.h>
3 #include "resourcemanager.h"
7 #include "texture2darray.h"
9 #include "texturecube.h"
16 Texture::Texture(unsigned t):
18 format(NO_PIXELFORMAT),
21 use_srgb_format(false),
22 auto_gen_mipmap(false)
25 void Texture::set_format(PixelFormat fmt)
27 PixelComponents comp = get_components(fmt);
28 PixelComponents st_comp = comp;
29 FormatSwizzle swiz = NO_SWIZZLE;
34 swiz = R_TO_LUMINANCE;
38 swiz = RG_TO_LUMINANCE_ALPHA;
51 PixelFormat st_fmt = make_pixelformat(st_comp, get_component_type(fmt), is_srgb(fmt));
52 require_pixelformat(st_fmt);
61 void Texture::load_image(const string &fn, unsigned lv)
69 Texture::GenericLoader::TypeRegistry &Texture::get_texture_registry()
71 static GenericLoader::TypeRegistry registry;
72 static bool initialized = false;
76 registry.register_type<Texture1D>("1d");
77 registry.register_type<Texture2D>("2d");
78 registry.register_type<Texture3D>("3d");
79 registry.register_type<Texture2DArray>("2d_array");
80 registry.register_type<TextureCube>("cube");
86 Texture::Loader::Loader(Texture &t, Collection *c):
87 CollectionObjectLoader<Texture>(t, c),
90 add("external_image", &Loader::external_image);
91 add("external_image_srgb", &Loader::external_image_srgb);
92 add("generate_mipmap", &Loader::generate_mipmap);
93 add("image_data", &Loader::image_data);
94 add("mipmap_levels", &Loader::mipmap_levels);
97 void Texture::Loader::finish()
99 if(obj.auto_gen_mipmap)
100 obj.generate_mipmap();
103 void Texture::Loader::load_external_image(Graphics::Image &img, const string &fn)
105 RefPtr<IO::Seekable> io = get_collection().open_raw(fn);
107 throw IO::file_not_found(fn);
111 void Texture::Loader::external_image(const string &fn)
113 obj.use_srgb_format = false;
114 external_image_common(fn);
117 void Texture::Loader::external_image_srgb(const string &fn)
119 obj.use_srgb_format = true;
120 external_image_common(fn);
123 void Texture::Loader::external_image_common(const string &fn)
126 obj.manager->set_resource_location(obj, get_collection(), fn);
130 load_external_image(img, fn);
131 obj.image(img, levels);
135 void Texture::Loader::generate_mipmap(bool gm)
137 obj.auto_gen_mipmap = gm;
140 void Texture::Loader::image_data(const string &data)
146 IO::Memory mem(data.data(), data.size());
149 obj.image(img, levels);
152 void Texture::Loader::mipmap_levels(unsigned l)