Resources *Resources::global_resources = 0;
Resources::Resources(bool set_as_global):
- default_tex_filter(Texture::can_generate_mipmap() ? LINEAR_MIPMAP_LINEAR : LINEAR),
- default_tex_anisotropy(1.0f),
srgb_conversion(false),
resource_manager(0)
{
add_type<Lighting>().suffix(".lightn").keyword("lighting")
.notify(&Resources::set_debug_name<Lighting>);
add_type<Material>().suffix(".mat")
- .creator(&Resources::create_material).notify(&Resources::set_debug_name<Material>);
+ .creator(&Resources::create_generic<Material>).notify(&Resources::set_debug_name<Material>);
add_type<Mesh>().keyword("mesh")
.creator(&Resources::create_mesh).notify(&Resources::set_debug_name<Mesh>);
add_type<Module>().suffix(".glsl").suffix(".spv")
add_type<Sampler>().suffix(".samp").keyword("sampler")
.notify(&Resources::set_debug_name<Sampler>);
add_type<Scene>().suffix(".scene")
- .creator(&Resources::create_scene);
+ .creator(&Resources::create_generic<Scene>);
add_type<Technique>().suffix(".tech").keyword("technique")
.notify(&Resources::set_debug_name<Technique>);
add_type<Texture1D>().base<Texture>().suffix(".tex1d").keyword("texture1d")
return builtins;
}
-void Resources::set_default_texture_filter(TextureFilter tf)
-{
- default_tex_filter = tf;
-}
-
-void Resources::set_default_texture_anisotropy(float a)
-{
- default_tex_anisotropy = a;
-}
-
void Resources::set_srgb_conversion(bool c)
{
srgb_conversion = c;
resource_manager = m;
}
-Material *Resources::create_material(const string &name)
+template<typename T>
+T *Resources::create_generic(const string &name)
{
if(RefPtr<IO::Seekable> io = open_raw(name))
{
DataFile::Parser parser(*io, name);
- Material::GenericLoader ldr(this);
+ typename T::GenericLoader ldr(*this);
ldr.load(parser);
- return ldr.get_material();
+ return ldr.get_object();
}
return 0;
return 0;
}
-Scene *Resources::create_scene(const string &name)
-{
- if(RefPtr<IO::Seekable> io = open_raw(name))
- {
- DataFile::Parser parser(*io, name);
- Scene::GenericLoader ldr(*this);
- ldr.load(parser);
- return ldr.get_scene();
- }
-
- return 0;
-}
-
Texture2D *Resources::create_texture2d(const string &name)
{
string ext = FS::extpart(name);
image.load_io(*io);
tex = new Texture2D(resource_manager);
- Sampler &samp = tex->get_default_sampler();
- if(is_mipmapped(default_tex_filter))
- {
- tex->set_auto_generate_mipmap(true);
- samp.set_mag_filter(LINEAR);
- }
- else
- samp.set_mag_filter(default_tex_filter);
- samp.set_min_filter(default_tex_filter);
- samp.set_max_anisotropy(default_tex_anisotropy);
if(resource_manager)
resource_manager->set_resource_location(*tex, *this, name);
Module &module = get<Module>(base);
RefPtr<Program> shprog = new Program;
shprog->add_stages(module);
- shprog->link();
return shprog.release();
}
{
Scene::GenericLoader ldr(obj);
load_sub_with(ldr);
- obj.add(name, ldr.get_scene());
+ obj.add(name, ldr.get_object());
}
} // namespace GL