@@ -26,40 +26,46 @@ void ShaderTemplate::load_snippets(const util::Path &snippet_path) {
26
26
}
27
27
28
28
void ShaderTemplate::add_snippet (const util::Path &snippet_path) {
29
- std::string file_name = snippet_path.get_name ();
30
- std::string name = file_name.substr (0 , file_name.find_last_of (' .' ));
31
29
auto file = snippet_path.open ();
32
30
std::string content = file.read ();
33
31
file.close ();
34
32
33
+ std::string name = snippet_path.get_stem ();
34
+
35
35
snippets[name] = content;
36
36
}
37
37
38
- std::string ShaderTemplate::generate_source () const {
39
- std::string result = template_code;
38
+ renderer::resources::ShaderSource ShaderTemplate::generate_source () const {
39
+ std::string result_src = template_code;
40
40
41
41
// Process each placeholder
42
42
for (const auto &[name, snippet_code] : snippets) {
43
43
std::string placeholder = " // PLACEHOLDER: " + name;
44
- size_t pos = result .find (placeholder);
44
+ size_t pos = result_src .find (placeholder);
45
45
46
46
if (pos != std::string::npos) {
47
- result .replace (pos, placeholder.length (), snippet_code);
47
+ result_src .replace (pos, placeholder.length (), snippet_code);
48
48
}
49
49
else {
50
50
log::log (WARN << " Placeholder not found in template: " << name);
51
51
}
52
52
}
53
53
54
54
// Check if all placeholders were replaced
55
- size_t placeholder_pos = result .find (" // PLACEHOLDER:" );
55
+ size_t placeholder_pos = result_src .find (" // PLACEHOLDER:" );
56
56
if (placeholder_pos != std::string::npos) {
57
- size_t line_end = result .find (' \n ' , placeholder_pos);
58
- std::string missing = result .substr (placeholder_pos,
59
- line_end - placeholder_pos);
57
+ size_t line_end = result_src .find (' \n ' , placeholder_pos);
58
+ std::string missing = result_src .substr (placeholder_pos,
59
+ line_end - placeholder_pos);
60
60
throw Error (MSG (err) << " Missing snippet for placeholder: " << missing);
61
61
}
62
62
63
+ auto result = resources::ShaderSource (
64
+ resources::shader_lang_t ::glsl,
65
+ resources::shader_stage_t ::fragment,
66
+ std::move (result_src));
67
+
63
68
return result;
64
69
}
70
+
65
71
} // namespace openage::renderer::world
0 commit comments