From 1971b20ebca35bc8dbe24902dd5749413b43ff1b Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 2 Feb 2026 17:27:32 +0100 Subject: 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. --- src/gpu/effects/shader_composer.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/gpu/effects/shader_composer.cc (limited to 'src/gpu/effects/shader_composer.cc') 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 + +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& 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(); +} + -- cgit v1.2.3