#pragma once #include "hecl/SystemChar.hpp" #include #include #include namespace hecl::shaderc { class Compiler { enum class StageType { Vertex, Fragment, Geometry, Control, Evaluation }; std::vector m_inputFiles; std::unordered_map m_fileContents; const std::string* getFileContents(SystemStringView path); std::unordered_map m_defines; template static bool StageAction(StageType type, const std::string& name, const std::string& basename, const std::string& stage, std::string& implOut); template static bool StageAction(const std::string& platforms, StageType type, const std::string& name, const std::string& basename, const std::string& stage, std::string& implOut); bool includeFile(SystemStringView file, std::string& out, int depth = 0); bool compileFile(SystemStringView file, std::string_view baseName, std::pair& out); public: void addInputFile(SystemStringView file); void addDefine(std::string_view var, std::string_view val); bool compile(std::string_view baseName, std::pair& out); }; }