learnOpengl/include/shaderService.h

39 lines
1.2 KiB
C
Raw Normal View History

2023-10-12 15:07:58 +08:00
//
// Created by jie on 2023/10/11.
//
#ifndef LEARNOPENGL_SHADERHELPER_H
#define LEARNOPENGL_SHADERHELPER_H
#include "glad/glad.h"
#include <filesystem>
#include <type_traits>
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<typename T>
requires std::is_same_v<T, bool> || std::is_same_v<T, int> || std::is_same_v<T, float>
void SetUniform(std::string_view name, T value);
};
template<typename T>
requires std::is_same_v<T, bool> || std::is_same_v<T, int> || std::is_same_v<T, float>
void ShaderService::SetUniform(std::string_view name, T value) {
if constexpr (std::is_same_v<T, bool>) {
glUniform1i(glGetUniformLocation(programId, name.data()), (int) value);
} else if constexpr (std::is_same_v<T, int>) {
glUniform1i(glGetUniformLocation(programId, name.data()), value);
} else if constexpr (std::is_same_v<T, float>) {
glUniform1f(glGetUniformLocation(programId, name.data()), value);
}
}
#endif //LEARNOPENGL_SHADERHELPER_H