// This file is part of the 64k demo project. // It defines the ShaderComposer class for managing WGSL snippets. #pragma once #include #include #include #include class ShaderComposer { public: static ShaderComposer& Get(); void RegisterSnippet(const std::string& name, const std::string& code); using CompositionMap = std::map; // Resolves #include directives recursively // substitutions: map "placeholder_name" -> "actual_snippet_name" std::string Compose(const std::vector& dependencies, const std::string& main_code, const CompositionMap& substitutions = {}); void VerifyIncludes() const; private: ShaderComposer() = default; void ResolveRecursive(const std::string& source, std::stringstream& ss, std::set& included, const CompositionMap& substitutions); std::map snippets_; };