summaryrefslogtreecommitdiff
path: root/src/gpu/effects/shader_composer.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-02 17:27:32 +0100
committerskal <pascal.massimino@gmail.com>2026-02-02 17:27:32 +0100
commit1971b20ebca35bc8dbe24902dd5749413b43ff1b (patch)
tree562eabce96ab2b78866a84bca8a26f0b22d5d764 /src/gpu/effects/shader_composer.cc
parent535ea3e2fdb90a524210e306d309f54f4630d348 (diff)
feat(3d): Implement Task 21.1 WGSL Library & Composer
- Implemented ShaderComposer for modular WGSL snippet management. - Factored out common math, primitives, lighting, and ray-box helpers. - Refactored Renderer3D to use dynamic shader composition. - Consolidated high-DPI and shadow robustness fixes into final shader structure.
Diffstat (limited to 'src/gpu/effects/shader_composer.cc')
-rw-r--r--src/gpu/effects/shader_composer.cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/gpu/effects/shader_composer.cc b/src/gpu/effects/shader_composer.cc
new file mode 100644
index 0000000..61da6e6
--- /dev/null
+++ b/src/gpu/effects/shader_composer.cc
@@ -0,0 +1,33 @@
+// This file is part of the 64k demo project.
+// It implements the ShaderComposer class.
+
+#include "gpu/effects/shader_composer.h"
+#include <sstream>
+
+ShaderComposer& ShaderComposer::Get() {
+ static ShaderComposer instance;
+ return instance;
+}
+
+void ShaderComposer::RegisterSnippet(const std::string& name, const std::string& code) {
+ snippets_[name] = code;
+}
+
+std::string ShaderComposer::Compose(const std::vector<std::string>& dependencies, const std::string& main_code) {
+ std::stringstream ss;
+ ss << "// Generated by ShaderComposer\n\n";
+
+ for (const auto& dep : dependencies) {
+ auto it = snippets_.find(dep);
+ if (it != snippets_.end()) {
+ ss << "// --- Snippet: " << dep << " ---\n";
+ ss << it->second << "\n";
+ }
+ }
+
+ ss << "// --- Main Code ---\n";
+ ss << main_code;
+
+ return ss.str();
+}
+