39 lines
1.2 KiB
C
39 lines
1.2 KiB
C
|
//
|
||
|
// 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
|