generated from AfonsoCMSousa/CPP-Template
84 lines
2.4 KiB
C++
84 lines
2.4 KiB
C++
#include "shader.h"
|
|
|
|
#define GL_SILENCE_DEPRECATION
|
|
|
|
|
|
// Shader loader helper
|
|
std::string loadShaderSource(const std::string& filepath) {
|
|
std::ifstream file(filepath);
|
|
if (!file.is_open()) {
|
|
std::cerr << "Failed to open shader file: " << filepath << std::endl;
|
|
return "";
|
|
}
|
|
std::stringstream buffer;
|
|
|
|
// std::cout << "Loaded " << filepath << " successfully!\n";
|
|
|
|
buffer << file.rdbuf();
|
|
return buffer.str();
|
|
}
|
|
|
|
GLuint compileShader(GLenum type, const std::string& source) {
|
|
GLuint shader = glCreateShader(type);
|
|
const char* src = source.c_str();
|
|
glShaderSource(shader, 1, &src, nullptr);
|
|
glCompileShader(shader);
|
|
|
|
int success;
|
|
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
|
if (!success) {
|
|
char infoLog[512];
|
|
glGetShaderInfoLog(shader, 512, nullptr, infoLog);
|
|
std::cerr << "Shader compilation failed:\n" << infoLog << std::endl;
|
|
exit(10);
|
|
}
|
|
return shader;
|
|
}
|
|
|
|
GLuint createShaderProgram(const std::string& vertexPath, const std::string& fragmentPath) {
|
|
std::string vertexSrc = loadShaderSource(vertexPath);
|
|
std::string fragmentSrc = loadShaderSource(fragmentPath);
|
|
|
|
GLuint vertexShader = compileShader(GL_VERTEX_SHADER, vertexSrc);
|
|
GLuint fragmentShader = compileShader(GL_FRAGMENT_SHADER, fragmentSrc);
|
|
|
|
GLuint program = glCreateProgram();
|
|
glAttachShader(program, vertexShader);
|
|
glAttachShader(program, fragmentShader);
|
|
glLinkProgram(program);
|
|
|
|
int success;
|
|
glGetProgramiv(program, GL_LINK_STATUS, &success);
|
|
if (!success) {
|
|
char infoLog[512];
|
|
glGetProgramInfoLog(program, 512, nullptr, infoLog);
|
|
std::cerr << "Shader linking failed:\n" << infoLog << std::endl;
|
|
exit(11);
|
|
}
|
|
|
|
glDeleteShader(vertexShader);
|
|
glDeleteShader(fragmentShader);
|
|
return program;
|
|
}
|
|
|
|
/* GLuint createComputeProgram(const std::string& computePath) {
|
|
std::string computeSrc = loadShaderSource(computePath);
|
|
GLuint computeShader = compileShader(GL_COMPUTE_SHADER, computeSrc);
|
|
|
|
GLuint program = glCreateProgram();
|
|
glAttachShader(program, computeShader);
|
|
glLinkProgram(program);
|
|
|
|
int success;
|
|
glGetProgramiv(program, GL_LINK_STATUS, &success);
|
|
if (!success) {
|
|
char infoLog[512];
|
|
glGetProgramInfoLog(program, 512, nullptr, infoLog);
|
|
std::cerr << "Compute shader linking failed:\n" << infoLog << std::endl;;
|
|
}
|
|
|
|
glDeleteShader(computeShader);
|
|
return program;
|
|
} */
|
|
|