#include "shader.h" // 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; } */