]> git.tdb.fi Git - libs/demoscene.git/blob - source/resources.cpp
Make the default constructor of Resources protected
[libs/demoscene.git] / source / resources.cpp
1 #include <msp/datafile/builtinsource.h>
2 #include <msp/fs/dir.h>
3 #include <msp/fs/stat.h>
4 #include "resources.h"
5
6 using namespace std;
7
8 namespace Msp {
9 namespace DemoScene {
10
11 void init_data(DataFile::BuiltinSource &);
12
13 Resources::Resources()
14 {
15         init();
16 }
17
18 Resources::Resources(const string &pack_name)
19 {
20         init();
21         init_sources(pack_name);
22 }
23
24 void Resources::init_sources(const string &pack_name)
25 {
26         FS::Path data_dir = "data";
27         if(FS::exists(data_dir))
28         {
29                 dir_source.add_directory(data_dir);
30                 add_source(dir_source);
31                 for(const auto &c: FS::list_filtered(data_dir, "\\.mdc$"))
32                         load(*this, (data_dir/c).str());
33         }
34         else
35         {
36                 pack_source.add_pack_file(pack_name);
37                 add_source(pack_source);
38         }
39 }
40
41 void Resources::init()
42 {
43         ui_font = 0;
44         ui_text_technique = 0;
45
46         set_default_texture_anisotropy(8);
47         set_srgb_conversion(true);
48
49         add_source(get_builtin_source());
50 }
51
52 const DataFile::CollectionSource &Resources::get_builtin_source()
53 {
54         static DataFile::BuiltinSource builtin_src;
55         bool init_done = false;
56
57         if(!init_done)
58         {
59                 init_data(builtin_src);
60                 init_done = true;
61         }
62
63         return builtin_src;
64 }
65
66 Resources &Resources::get_builtins()
67 {
68         static Resources builtins;
69         return builtins;
70 }
71
72 const GL::Font &Resources::get_ui_font() const
73 {
74         if(!ui_font)
75                 throw runtime_error("no ui font");
76         return *ui_font;
77 }
78
79 const GL::Technique &Resources::get_ui_text_technique() const
80 {
81         if(!ui_text_technique)
82                 throw runtime_error("no ui text technique");
83         return *ui_text_technique;
84 }
85
86 void Resources::set_ui_text_resources(const string &font, const string &tech)
87 {
88         ui_font = &get<GL::Font>(font);
89         ui_text_technique = &get<GL::Technique>(tech);
90 }
91
92 } // namespace DemoScene
93 } // namespace Msp