7
7
#include " rendering/shader_program.h"
8
8
#include " urdf/fighter_model.h"
9
9
#include " audio/audio.h"
10
-
10
+ #include " resources/load_model.h"
11
+ #include " resources/load_texture.h"
12
+ #include " resources/load_geometry.h"
13
+ #include " resources/locator.h"
14
+ #include " rendering/compile_shader_program.h"
15
+ #include " rendering/primitives.h"
16
+ #include " urdf/parsing.h"
11
17
#include < entt/entt.hpp>
12
18
13
19
namespace ecs
14
20
{
21
+ struct model_loader final
22
+ {
23
+ using result_type = std::shared_ptr<rendering::Model>;
24
+
25
+ result_type operator ()(const std::string& uri) const
26
+ {
27
+ auto meshes = std::vector<rendering::Mesh>();
28
+ for (const auto & mesh_data : resources::load_model (uri))
29
+ {
30
+ meshes.emplace_back (mesh_data);
31
+ }
32
+
33
+ return std::make_shared<rendering::Model>(uri, std::move (meshes));
34
+ }
35
+
36
+ result_type operator ()(std::function<rendering::Model()> load_fn) const
37
+ {
38
+ return std::make_shared<rendering::Model>(load_fn ());
39
+ }
40
+ };
41
+
42
+ struct primitive_loader final
43
+ {
44
+ using result_type = std::shared_ptr<rendering::Model>;
45
+
46
+ result_type operator ()(std::function<rendering::Model()> load_fn) const
47
+ {
48
+ return std::make_shared<rendering::Model>(load_fn ());
49
+ }
50
+ };
51
+
52
+ struct texture_loader final
53
+ {
54
+ using result_type = std::shared_ptr<rendering::Texture>;
55
+
56
+ result_type operator ()(const std::string& uri, const bool as_cubemap) const
57
+ {
58
+ if (as_cubemap)
59
+ {
60
+ return std::make_shared<rendering::Texture>(uri, resources::load_cubemap_texture (uri));
61
+ }
62
+ else
63
+ {
64
+ return std::make_shared<rendering::Texture>(resources::load_texture (uri));
65
+ }
66
+ }
67
+ };
68
+
69
+ struct shader_loader final
70
+ {
71
+ using result_type = std::shared_ptr<rendering::ShaderProgram>;
72
+
73
+ result_type operator ()(const std::string& uri,
74
+ const std::string& vert_filename,
75
+ const std::string& frag_filename,
76
+ const std::optional<std::string>& geom_filename) const
77
+ {
78
+ return rendering::compileShaders (uri, vert_filename, frag_filename, geom_filename);
79
+ }
80
+ };
81
+
82
+ struct fighter_model_loader final
83
+ {
84
+ using result_type = std::shared_ptr<urdf::FighterModel>;
85
+
86
+ result_type operator ()(const std::string& uri) const
87
+ {
88
+ return std::make_shared<urdf::FighterModel>(urdf::parse_fighter_urdf (uri));
89
+ }
90
+ };
91
+
92
+ struct sound_loader final
93
+ {
94
+ using result_type = std::shared_ptr<audio::AudioBuffer>;
95
+
96
+ result_type operator ()(const std::string& uri) const
97
+ {
98
+ return std::make_shared<audio::AudioBuffer>(std::string (resources::locator::SOUNDS_PATH) +
99
+ uri);
100
+ }
101
+ };
102
+
15
103
class ResourceManager
16
104
{
17
105
public:
@@ -28,20 +116,19 @@ class ResourceManager
28
116
void load_fighter_model (const std::string& uri);
29
117
void load_sound (const std::string& uri);
30
118
31
- void
32
- update_shaders (std::function<void (entt::resource_handle<const rendering::ShaderProgram>)> fn);
119
+ void update_shaders (std::function<void (const entt::resource<rendering::ShaderProgram>&)> fn);
33
120
34
- entt::resource_handle <const rendering::Model> get_model (const std::string& uri) const ;
35
- entt::resource_handle <const rendering::Texture> get_texture (const std::string& uri) const ;
36
- entt::resource_handle <const rendering::ShaderProgram> get_shader (const std::string& uri) const ;
37
- entt::resource_handle <const urdf::FighterModel> get_fighter_model (const std::string& uri) const ;
38
- entt::resource_handle <const audio::AudioBuffer> get_sound (const std::string& uri) const ;
121
+ entt::resource <const rendering::Model> get_model (const std::string& uri) const ;
122
+ entt::resource <const rendering::Texture> get_texture (const std::string& uri) const ;
123
+ entt::resource <const rendering::ShaderProgram> get_shader (const std::string& uri) const ;
124
+ entt::resource <const urdf::FighterModel> get_fighter_model (const std::string& uri) const ;
125
+ entt::resource <const audio::AudioBuffer> get_sound (const std::string& uri) const ;
39
126
40
127
private:
41
- entt::resource_cache<rendering::Model> model_cache;
42
- entt::resource_cache<rendering::Texture> texture_cache;
43
- entt::resource_cache<rendering::ShaderProgram> shader_cache;
44
- entt::resource_cache<urdf::FighterModel> fighter_model_cache;
45
- entt::resource_cache<audio::AudioBuffer> sound_cache;
128
+ entt::resource_cache<rendering::Model, model_loader > model_cache;
129
+ entt::resource_cache<rendering::Texture, texture_loader > texture_cache;
130
+ entt::resource_cache<rendering::ShaderProgram, shader_loader > shader_cache;
131
+ entt::resource_cache<urdf::FighterModel, fighter_model_loader > fighter_model_cache;
132
+ entt::resource_cache<audio::AudioBuffer, sound_loader > sound_cache;
46
133
};
47
134
} // namespace ecs
0 commit comments