Resources::Resources()
{
- init();
-}
-
-Resources::Resources(const FS::Path &fn)
-{
- init();
-
- dir_src = new DataFile::DirectorySource;
- dir_src->add_directory(FS::dirname(fn));
- add_source(*dir_src);
-
- DataFile::load(*this, fn.str());
-}
-
-void Resources::init()
-{
- default_font = 0;
- dir_src = 0;
add_type<Graphic>().keyword("graphic");
add_type<GL::Module>().creator([this](const string &n){ return create_module(n); });
add_type<GL::Sampler>().creator([this](const string &n){ return create_sampler(n); });
add_type<Style>().keyword("style");
}
-Resources::~Resources()
+Resources::Resources(const FS::Path &fn):
+ Resources()
{
- delete dir_src;
+ dir_src = make_unique<DataFile::DirectorySource>();
+ dir_src->add_directory(FS::dirname(fn));
+ add_source(*dir_src);
+
+ DataFile::load(*this, fn.str());
}
const GL::Font &Resources::get_default_font() const
GL::Module *Resources::create_module(const string &name)
{
if(name!="ui.glsl")
- return 0;
+ return nullptr;
- GL::Module *mod = 0;
+ unique_ptr<GL::Module> mod;
if(GL::get_backend_api()==GL::VULKAN)
- mod = new GL::SpirVModule;
+ mod = make_unique<GL::SpirVModule>();
else
- mod = new GL::GlslModule;
+ mod = make_unique<GL::GlslModule>();
mod->set_source("import msp_interface; import common;\n"
"uniform sampler2D ui_tex;\n"
"#pragma MSP stage(fragment)\n"
"void main() { frag_color = texture(ui_tex, texcoord.xy)*color; }\n");
- return mod;
+ return mod.release();
}
GL::Program *Resources::create_program(const string &name)
{
if(name!="ui.shader")
- return 0;
+ return nullptr;
return new GL::Program(get<GL::Module>("ui.glsl"));
}
static const Regex r_name("^(linear|nearest)_clamp.samp$");
if(RegMatch m = r_name.match(name))
{
- GL::Sampler *sampler = new GL::Sampler;
+ unique_ptr<GL::Sampler> sampler = make_unique<GL::Sampler>();
sampler->set_filter(lexical_cast<GL::TextureFilter>(toupper(m.group(1).str)));
sampler->set_wrap(GL::CLAMP_TO_EDGE);
- return sampler;
+ return sampler.release();
}
- return 0;
+ return nullptr;
}
GL::Texture2D *Resources::create_texture(const string &name)
{
string ext = FS::extpart(name);
if(ext==".png" || ext==".jpg")
- if(IO::Seekable *io = open_raw(name))
+ if(auto io = unique_ptr<IO::Seekable>(open_raw(name)))
{
Graphics::Image image;
image.load_io(*io);
- delete io;
+ io.reset();
- GL::Texture2D *tex = new GL::Texture2D;
+ unique_ptr<GL::Texture2D> tex = make_unique<GL::Texture2D>();
tex->image(image);
- return tex;
+ return tex.release();
}
- return 0;
+ return nullptr;
}
void Resources::Loader::font(const string &name)
{
- RefPtr<GL::Font> fnt = new GL::Font;
+ unique_ptr<GL::Font> fnt = make_unique<GL::Font>();
load_sub(*fnt, res);
res.add(name, fnt.get());
if(!res.default_font)