// // Created by jie on 2023/10/11. // #ifndef LEARNOPENGL_SHADERHELPER_H #define LEARNOPENGL_SHADERHELPER_H #include "glad/glad.h" #include #include class ShaderService { private: unsigned int programId; public: ShaderService(const std::filesystem::path &vertexShaderPath, const std::filesystem::path &fragShaderPath); bool CheckShader(unsigned int shaderIndex, bool isProgram = false); void Use(); template requires std::is_same_v || std::is_same_v || std::is_same_v void SetUniform(std::string_view name, T value); }; template requires std::is_same_v || std::is_same_v || std::is_same_v void ShaderService::SetUniform(std::string_view name, T value) { if constexpr (std::is_same_v) { glUniform1i(glGetUniformLocation(programId, name.data()), (int) value); } else if constexpr (std::is_same_v) { glUniform1i(glGetUniformLocation(programId, name.data()), value); } else if constexpr (std::is_same_v) { glUniform1f(glGetUniformLocation(programId, name.data()), value); } } #endif //LEARNOPENGL_SHADERHELPER_H