// // Created by atdunbg on 2026/9/20. // #ifndef HELLOVULKAN_SHADERMANAGER_H #define HELLOVULKAN_SHADERMANAGER_H #pragma once #include #include #include #include namespace Engine { class Device; struct ShaderObject { vk::ShaderEXT Handle; vk::ShaderStageFlagBits Stage; }; class ShaderManager { public: ShaderManager(Device& device); ~ShaderManager(); ShaderManager(const ShaderManager&) = delete; ShaderManager& operator=(const ShaderManager&) = delete; // 改成接受 vector ShaderObject CreateFromFile(const std::string& spvPath, vk::ShaderStageFlagBits stage, const std::vector& layouts = {}, u32 pushConstantSize = 0); ShaderObject CreateFromSPIRV(const std::vector& spirv, vk::ShaderStageFlagBits stage, const std::vector& layouts = {}, u32 pushConstantSize = 0); void Destroy(const ShaderObject& shader); private: std::vector ReadSPIRV(const std::string& path); Device& m_Device; }; } // namespace Engine #endif //HELLOVULKAN_SHADERMANAGER_H