// 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(); // Register a snippet (e.g. "common_math", "sdf_primitives") void RegisterSnippet(const std::string& name, const std::string& code); using CompositionMap = std::map; // Assemble a final shader string by prepending required snippets // and recursively resolving #include "snippet_name" directives. // Optional substitutions: map "placeholder_name" -> "actual_snippet_name" std::string Compose(const std::vector& dependencies, const std::string& main_code, const CompositionMap& substitutions = {}); private: ShaderComposer() = default; void ResolveRecursive(const std::string& source, std::stringstream& ss, std::set& included, const CompositionMap& substitutions); std::map snippets_; };